我是 Ruby on Rails 的新手,使用 rails 3.2.13 和 ruby 1.9.3p392。我正在尝试构建一个供应用程序使用的引擎,这可能会导致我的困惑。
引擎名称是 sales_app。我有一个页面将一堆数据发布到 sales_app/sales#create 以创建销售。在销售控制器的创建动作中,我做了一些数据处理并尝试实例化一个销售对象。我没有从模型创建对象,而是为一个我什至不知道我正在调用的删除方法获得 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 控制器的创建操作具有以下内容:
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