Fin*_*nks 32 ruby-on-rails associations ruby-on-rails-3.1
rails的新手,我正在跟踪使用rails 3.1在Agile Web开发中找到的Depot项目.一切都很好,直到我迷失了本书使用"构建"方法.
@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.line_items.build(product: product)
Run Code Online (Sandbox Code Playgroud)
我的谷歌搜索让我明白.build方法只是一种在表格中创建行的更简洁的方法(表格之间有关联).但是在上面的代码中,我期待代码看起来像这样:
@line_item = @cart.line_items.build(product_id => params[:product_id])
Run Code Online (Sandbox Code Playgroud)
我不明白为什么作者必须存储整行产品(product = Product.find(params [:product_id]))而不是仅仅获取product_id ...
还有比我能理解的更多的东西吗?
Bil*_*han 60
你误解了build
.它只是一个别名new
,没什么特别的.https://github.com/rails/rails/blob/959fb8ea651fa6638aaa7caced20d921ca2ea5c1/activerecord/lib/active_record/relation.rb#L84
build
不会在数据库中"创建"记录,只需在内存中创建一个新对象,以便视图可以获取此对象并显示某些内容,尤其是对于表单.
对于你的第二个问题,是的,你通过id撰写的方式也会起作用.但更好的方法是不要相信参数.相反,首先通过在db中查找来验证它.