我正在使用Agile Web Dev w / Rails的书(第4版),我完全陷入困境...... 我在Mac OSX上运行Rails 3.2.3。 我在任务D-3:添加一个按钮 ....它从测试开始:函数在本章末尾没有工作......它给了我一个错误说:
Can't Mass assign protected attributes: product
我遵循了这里给出的建议:http://forums.pragprog.com/forums/148/topics/10565
并将Line_Items_Controller中的代码行更改为
@line_item = @cart.line_items.build
@line_item.product = product
以下是我当前的Line_Items_Controller创建方法:
# POST /line_items
def create
@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.line_items.build
@line_item.product = product
respond_to do |format|
if @line_item.save
format.html { redirect_to(@line_item.cart,
:notice => 'Line item was successfully created.') }
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
end
现在我收到了这个奇怪的消息:
NoMethodError in LineItemsController#create undefined method `product=' for <LineItem:0x000001024f7fb0>
这是我的LineItem模型
class LineItem < ActiveRecord::Base
attr_accessible :cart_id, :product_id, :product
end
我现在还不确定该做什么,因为我是一个完整的Rails(&amp; Ruby)newb。 有人能指出我正确的方向吗?
答案 0 :(得分:2)
更改原始代码行
@line_item = @cart.line_items.build(product: product)
@line_item = @cart.line_items.build(:product_id => product.id)
line_items_controller.rb
{{1}}为我解决了这个问题。
答案 1 :(得分:1)
就我而言,LineItem中的product_id为attr_accessible:
attr_accessible :cart_id, :product_id
所以我改变了:product =&gt; build的产品属性为:product_id =&gt; product.id,它的工作原理。
@line_item = @cart.line_items.build(:product_id => product.id)
答案 2 :(得分:1)
如果您希望本书中的示例完全按照他们输入的方式工作,请转到models / line_item.rb并添加attr_accessible看起来像这样;
attr_accessible :cart_id, :product_id, :product
n'joy。
答案 3 :(得分:0)
您的订单项模型与Product没有ActiveRecord
关联。我不确定你在建造什么,但我认为你会想要:
#lineitem
belongs_to :produce
#product
has_many :line_items
您还需要将product_id添加到订单项表格中。