ruby on rails引擎undefined方法'delete'代表nil:NilClass

Der*_*ger 2 ruby-on-rails rails-engines ruby-on-rails-3

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

引擎名称为sales_app.我有一个页面将大量数据发布到sales_app/sales #create以创建销售.在销售控制器的创建操作中,我做了一些数据处理并尝试实例化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"}
Run Code Online (Sandbox Code Playgroud)

Sales控制器的创建操作具有以下内容:

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
Run Code Online (Sandbox Code Playgroud)

日期内容旨在将日期和时间转换为单个日期时间,我认为这是有效的.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
Run Code Online (Sandbox Code Playgroud)

我已经生成了我的模型,我做了一个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
Run Code Online (Sandbox Code Playgroud)

架构文件位于主应用程序中,但销售模型文件位于引擎中.啊.

所以可能有很多我可以做得更好.但具体来说,我想知道为什么我不能创建一个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
Run Code Online (Sandbox Code Playgroud)

FCS*_*ike 5

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

具体来说,似乎方法"初始化"在Rails中保留,就像在Ruby中一样.因此,如果您正在创建一个旨在将某些数据插入其中一个模型的方法(例如before_validation:initialize),您将获得未定义的方法删除错误.将方法命名为其他内容(例如before_validation:init_my_model),错误将消失.

@Deranger我怀疑初始化方法是一个糟糕的事情.