我有以下模型结构
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
但我收到错误消息:
未定义的方法`asset'for“3”:String
我觉得我已经尝试了各种变化。如何让这个工作?
答案 0 :(得分:0)
我在这里猜测但是如何使用值而不是each_with_index。
params[:item][:assets_attributes].values do |y|
y.asset.session_user_id=12
end
答案 1 :(得分:0)
所以,有几件事情。
首先,呼叫each_with_index
的{{1}}会为您提供object then the index
。自Hash
defines each
as an enumerable with two variables起,Hash
将获得key
。
value
因此,如果您只想弄乱这些值,那么我建议采用natedavisolds'方法。但这导致我们遇到第二个问题。访问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
;你需要使用括号Hash
而不是方法调用。
总而言之,它应该看起来像这样,
[]