私は、Agile Web Development with Rails(第4版)の書籍で作業しており、動作していないコードにぶつかりました。私はなぜそれが動作していないか把握するために努力しましたが、私はそれを作っていませんでした。LineItemsControllerのNoMethodError#create
その背景INFORMATION
次のクラスが関与している:NOW
class Cart < ActiveRecord::Base
has_many :line_items, :dependent => :destroy
end
class LineItem < ActiveRecord::Base
belongs_to :product
belongs_to :cart
end
class ApplicationController < ActionController::Base
protect_from_forgery
private
def current_cart
Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Cart.create
session[:cart_id] = cart.id
end
end
ここでそれが失敗したところである:
class LineItemsController < ApplicationController
def index
@line_items = LineItem.all`
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @line_items }
end
end
# GET /line_items/1
# GET /line_items/1.xml
def show
@line_item = LineItem.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @line_item }
end
end
# GET /line_items/new
# GET /line_items/new.xml
def new
@line_item = LineItem.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @line_item }
end
end
# GET /line_items/1/edit
def edit
@line_item = LineItem.find(params[:id])
end
# POST /line_items
# POST /line_items.xml
def create
@cart = current_cart
product = Product.find(params[:product_id])
@line_item = **@cart.line_items.build(:product => product)**`
エラーメッセージ * NoMethodError LineItemsController#で を作成定義されていないmeth 9用:Fixnumか Rails.root:/ホーム/ tmiskiew /デポ*
*アプリ/コントローラ/ line_items_controller.rb:53: `作成の」OD` line_items:= { "product_idの" リクエスト パラメータ> "4"、 "authenticity_token" => "dR4nL5zI + R7qIIPwNkl3EoaI1KyFWRokvh92m3PwD8o ="} *
誰でも@ cart.line_items.buildと間違って何のアイデア? 私はレール3.0.9とRuby 1.8.7
おかげ トーマス
あなたは、私がリターンセッションでcurrent_cartの他の枝を完了する必要があり意味するかに移行?私はそれを試みましたが、今はSQLite3 :: BusyExceptionを取得しています:データベースがロックされています:INSERT INTO "カート"( "updated_at"、 "created_at")VALUES( '2011-08-04 07:51:23.552125'、 '2011 -08-04 07:51:23.552125 ') – Thomas
カートの代わりにセッションを返すのは、次のコードのためです: 'respond_to do | format | if @ line_item.save format.html {redirect_to(@ line_item.cart、 :notice => '広告申込情報が正常に作成されました。')} format.xml {render:xml => @line_item、 :status = >:created::location => @line_item} else format.html {render:action => "new"} format.xml {render:xml => @ line_item.errors、 :status =>:unprocessable_entity} end end' – Thomas
あなたは 'cart'を返すことができ、' @cart = current_cart'のようにセッション[:cart_id]に入れたものを使用して '@ cart.id'を呼び出すことができます。これはsession [:cart_id](セッションcart.idに入れた後) – cristian