新手问题 build 参数问题

jiwoorico · 2013年08月15日 · 最后由 jiwoorico 回复于 2013年08月15日 · 1985 次阅读

看这行代码: @cart = current_cart product = Product.find(params[:product_id]) @line_item = @cart.line_items.build(product: product)

这里参数 product: product 是什么意思啊?看不明白!

就是一个初始值啊 这个 line_item 的初始值,一个是 build 它的 cart,另一个就是上面得到的 product

我主要不大明白参数为什么写成 product: product?

#2 楼 @jiwoorico product: product 是一个 shorthand,展开写是 :product => product

这里面第一个 :product@line_item 里面的 product attribute,第二个 product 是你上一行取到的 product object . 意思就是 build 一个 @line_item ,这个 @line_item 里面的 product 的值是上一行里面取到的 product

我擦,3 楼你一讲我就明白了。多谢

#3 楼 @blacktulip
再请教下这个问题, Download rails32/depot_g/test/functional/line_items_controller_test.rb test "should create line_item" do assert_difference('LineItem.count') do ➤ post :create, product_id: products(:ruby).id end ➤ assert_redirected_to cart_path(assigns(:line_item).cart) end

这里 (:ruby) 什么用途?

#5 楼 @jiwoorico 我对 minitest 不熟 ... 不过据字面意思猜测这句话是这个意思...

post :create, product_id: products(:ruby).id

#create 方法对应的路径发送一个 post 请求,这个请求中包含一个 product_id 的字段,这个字段的值是 products 表里面的 ruby 这个记录的 id

我不知道说的对不对啊 ...

这是 ruby 新支持的 hash 键值写法。以前必须是这种样子 :a=>"hello", 现在也支持 a: "hello" 忘记是那个版本支持的了。

#6 楼 @blacktulip 太感谢了,原来是这样。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号