Rails 3.2.13 と Ruby 1.9.3p392 を使用して、Ruby on Rails を初めて使用しています。アプリで使用するエンジンを構築しようとしていますが、これが混乱の原因になっている可能性があります。
エンジン名は sales_app です。大量のデータを sales_app/sales#create に投稿してセールを作成するページがあります。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"}
Sales コントローラーには、その create アクション用に次のものがあります。
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