rails 中的参数设置和数组
setting and array of params in rails
需要在一次交易中购买一系列物品,但由于关系问题,每件物品必须是不同的交易对象。
确认操作旨在独立列出这些项目中的每一项。控制器尝试为查看每个交易准备参数
<% @transactions.each do |transaction| %>
<%= params[:product_id][:product_id] %>
[...]
如下:
@transactions = params[:product_ids].map do |product_id|
@transaction = Transaction.new
@inventories = Inventory.where(['product_id = ?', product_id]).all
@my_price = my_price
params[:product_id][:product_id] = product_id # sanity check
params[:product_id][:additional_info] = session[:additional_info]
params[:product_id][:rate] = @inventories.map(&@my_price).inject(0, :+)
end
@sub_total = @transactions.params[:product_id][:rate].sum
然而 undefined method []= for nil:NilClass
是在为每个 product_id 构建参数时生成的。这个命令显然是错误的。 [方法也可以是inefficient/ineffective...]
我相信你并不是真正的意思params[:product_id][:product_id]
,而是params[product_id][:product_id]
,因为:product_id
是一个符号,不是一个变量.
在hash中设置新的hash时,需要先这样定义:
params[product_id] = {}
params[product_id][:product_id] = product_id
# ...
这应该解决 undefined method []= for nil:NilClass
。我想你在修复这个问题后会遇到更多问题(比如 @inventories.map(&@my_price)
)...
经过一些猜测,我猜想执行您想要的操作的代码将如下所示:
@transactions = params[:product_ids].map do |product_id|
transaction = Transaction.new
transaction.product_id = product_id # sanity check
transaction.additional_info = session[:additional_info]
transaction.rate = Inventory.where(['product_id = ?', product_id]).sum(:my_price)
transaction
end
@sub_total = @transactions.map(&:rate).sum
视图将是这样的:
<% @transactions.each do |transaction| %>
<%= transaction.product_id %>
[...]
需要在一次交易中购买一系列物品,但由于关系问题,每件物品必须是不同的交易对象。
确认操作旨在独立列出这些项目中的每一项。控制器尝试为查看每个交易准备参数
<% @transactions.each do |transaction| %>
<%= params[:product_id][:product_id] %>
[...]
如下:
@transactions = params[:product_ids].map do |product_id|
@transaction = Transaction.new
@inventories = Inventory.where(['product_id = ?', product_id]).all
@my_price = my_price
params[:product_id][:product_id] = product_id # sanity check
params[:product_id][:additional_info] = session[:additional_info]
params[:product_id][:rate] = @inventories.map(&@my_price).inject(0, :+)
end
@sub_total = @transactions.params[:product_id][:rate].sum
然而 undefined method []= for nil:NilClass
是在为每个 product_id 构建参数时生成的。这个命令显然是错误的。 [方法也可以是inefficient/ineffective...]
我相信你并不是真正的意思params[:product_id][:product_id]
,而是params[product_id][:product_id]
,因为:product_id
是一个符号,不是一个变量.
在hash中设置新的hash时,需要先这样定义:
params[product_id] = {}
params[product_id][:product_id] = product_id
# ...
这应该解决 undefined method []= for nil:NilClass
。我想你在修复这个问题后会遇到更多问题(比如 @inventories.map(&@my_price)
)...
经过一些猜测,我猜想执行您想要的操作的代码将如下所示:
@transactions = params[:product_ids].map do |product_id|
transaction = Transaction.new
transaction.product_id = product_id # sanity check
transaction.additional_info = session[:additional_info]
transaction.rate = Inventory.where(['product_id = ?', product_id]).sum(:my_price)
transaction
end
@sub_total = @transactions.map(&:rate).sum
视图将是这样的:
<% @transactions.each do |transaction| %>
<%= transaction.product_id %>
[...]