1

我有以下模型结构

class Asset < ActiveRecord::Base
  attr_writer :session_user_id
  ...
end

class Item < ActiveRecord::Base
  has_many :assets, :as => :assetable, :dependent => :destroy
  ...
end

并希望将 user_id 放入与资产关联的值中。我在将变量关联到上传的文件时遇到问题。这是发布的数据:

"assets_attributes"=>{"3"=>{"asset"=>#<ActionDispatch::Http::UploadedFile:0x007fd04dde17f8 @original_filename="nautugly.jpg",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"menu_item[assets_attributes][3][asset]\"; filename=\"nautugly.jpg\"\r\nContent-Type: image/jpeg\r\n",
@tempfile=#<File:/var/folders/94/slp2488s6nvgg8qq0g0p5c0m0000gn/T/RackMultipart20120323-51480-1lpa754>>,
"description"=>""},...

并且想要访问 Asset 中的 session_user_id。在 items_controller 中,我添加了:

params[:item][:assets_attributes].each_with_index do |value, key|
  value.each do |y|
   y.asset.session_user_id=12
  end

但我收到错误消息:

“3”的未定义方法“资产”:字符串

我觉得我已经尝试了每一种变化。如何让它工作?

4

2 回答 2

0

所以,有几件事。

首先,each_with_index调用 aHash会给你对象,然后是index. 由于Hash定义each为具有两个变量的可枚举,您将key获得value.

params[:item][:assets_attributes].each_with_index do |attr1, attr2|
  puts attr1 # ["3", {"asset" => "MyAsset!"}]
  puts attr2 # 0

  attr1.each do |value|
    puts value 
    # "3" on First Run
    # {"asset" => "MyAsset!"} on Second Run
  end
end

因此,如果您只想弄乱这些值,那么我建议使用 natedavisolds 的方法。但这导致了我们的第二个问题。访问Hash; 你需要使用方括号[]而不是方法调用来做到这一点。

总而言之,它应该看起来像这样,

params[:item][:assets_attributes].values.each do |y|
  y[:session_user_id] = 12
end
于 2012-03-24T04:33:11.777 回答
0

我在这里猜测,但是如何使用值而不是 each_with_index。

params[:item][:assets_attributes].values do |y|
  y.asset.session_user_id=12
end
于 2012-03-24T01:16:18.217 回答