gpt4 book ai didi

ruby-on-rails - Ruby on Rails 引擎未定义方法 'delete' 为 nil :NilClass

转载 作者:行者123 更新时间:2023-12-02 05:02:35 25 4
gpt4 key购买 nike

我是 Ruby on Rails 的新手,使用的是 rails 3.2.13 和 ruby​​ 1.9.3p392。我正在尝试构建一个供应用程序使用的引擎,这可能会导致我感到困惑。

引擎名称是 sales_app。我有一个页面将一堆数据发布到 sales_app/sales#create 以创建销售。在销售 Controller 的创建操作中,我做了一些数据处理并尝试实例化一个 Sale 对象。我没有从模型中创建对象,而是得到了删除方法的 NoMethodError 异常,我什至不知道我在调用。请帮忙。

这里是相关的细节。我的销售/新页面将以下参数发布到 sales#create:

{"sale"=>{"name"=>"Test",
"desc"=>"This is a test",
"start_date"=>"05/30/2013",
"end_date"=>"05/31/2013",
"start_time"=>"07:00",
"end_time"=>"08:00",
"products"=>""},
"create"=>"Create Sale"}

Sales Controller 的创建操作如下:

def create
if params[:create] == "Create Sale"
# process the data - add a start and end to params
#format = "%m/%d/%Y %H:%M:%S"
params[:sale][:start] = DateTime.strptime("#{params[:sale][:start_date]} #{params[:sale][:start_time]}:00", '%m/%d/%Y %H:%M:%S')
params[:sale][:end] = DateTime.strptime("#{params[:sale][:end_date]} #{params[:sale][:end_time]}:00", '%m/%d/%Y %H:%M:%S')
@sale = Sale.new(:name => params[:sale][:name], :desc => params[:sale][:desc], :start => params[:sale][:start], :end => params[:sale][:end])
if @sale.save
redirect_to @sale
else
render 'new'
end
else
render '/sales_app/static_pages/home'
end
end

日期内容旨在将日期和时间转换为单个日期时间,我认为这是可行的。 Sale 模型本身如下所示(我什至不确定为什么其中一些是这样的):

module SalesApp
class Sale < ActiveRecord::Base
attr_accessible :desc, :end, :name, :start
def initialize(attributes = {})
@name = attributes[:name]
@desc = attributes[:desc]
@start = attributes[:start]
@end = attributes[:end]
end

validates :name, presence: true, length: { maximum: 255 }
validates :desc, presence: true, length: { maximum: 65536 }
validates :start, presence: true
validates :end, presence: true
end

end

我已经生成了我的模型并且我做了一个 rake db:migrate。我的架构如下所示:

ActiveRecord::Schema.define(:version => 20130527160623) do

create_table "sales", :force => true do |t|
t.string "name"
t.text "desc"
t.datetime "start"
t.datetime "end"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end

end

模式文件在主应用程序中,但销售模型文件在引擎中。呃。

所以我可能有很多地方可以做得更好。但是,具体来说,我想知道为什么我不能创建一个 Sale 对象,或者我可能需要做些什么来创建一个对象,或者至少为什么在我不知道为什么的情况下调用了某种未定义的删除方法。任何帮助将不胜感激。谢谢!

EDIT Rake Routes 显示以下内容:

sales_app_static_pages_home GET    /sales_app/static_pages/home(.:format) sales_app/static_pages#home
sales_app_static_pages_help GET /sales_app/static_pages/help(.:format) sales_app/static_pages#help
sales_app_sales GET /sales_app/sales(.:format) sales_app/sales#index
POST /sales_app/sales(.:format) sales_app/sales#create
new_sales_app_sale GET /sales_app/sales/new(.:format) sales_app/sales#new
edit_sales_app_sale GET /sales_app/sales/:id/edit(.:format) sales_app/sales#edit
sales_app_sale GET /sales_app/sales/:id(.:format) sales_app/sales#show
PUT /sales_app/sales/:id(.:format) sales_app/sales#update
DELETE /sales_app/sales/:id(.:format) sales_app/sales#destroy
sales_app_root /sales_app(.:format) sales_app/static_pages#home

最佳答案

我知道这是一个相当古老的问题,这个答案并没有直接回答原始帖子,但如果其他人偶然发现“未定义的方法删除”错误并想知道发生了什么,它可能与您的方法名称。

具体来说,“initialize”方法似乎在 Rails 中保留,就像在 Ruby 中一样。因此,如果您正在制作一种旨在将一些数据插入您的模型之一的方法(例如 before_validation :initialize),您将收到未定义方法删除错误。将该方法命名为其他名称(例如 before_validation :init_my_model),错误就会消失。

@Deranger 我怀疑是初始化方法把事情搞砸了。

关于ruby-on-rails - Ruby on Rails 引擎未定义方法 'delete' 为 nil :NilClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16823385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com