设置和轨道中的参数数组

时间:2015-01-04 13:02:26

标签: ruby arrays ruby-on-rails-3.2

需要在单个交易中购买一系列对象,但由于关系问题,每个项目必须是不同的交易对象。

确认操作旨在独立列出这些项目。控制器尝试准备用于查看每个事务的参数

<% @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

但是,在为每个product_id构建参数时会生成undefined method []= for nil:NilClass。这个命令显然是错误的。 [这种方法也可能效率低下/无效......]

1 个答案:

答案 0 :(得分:1)

我相信你并不是params[:product_id][:product_id],而是params[product_id][:product_id],因为:product_id是一个符号,不是一个变量。

在哈希中设置新哈希时,您需要先将其定义为:

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 %>
[...]