Ruby on rails 从通过表单上载的文件访问嵌套属性资产上的属性写入程序

Ruby on rails 从通过表单上载的文件访问嵌套属性资产上的属性写入程序,ruby-on-rails,ruby-on-rails-3,file-upload,has-many-polymorphs,Ruby On Rails,Ruby On Rails 3,File Upload,Has Many Polymorphs,我有以下模型结构 class Asset < ActiveRecord::Base attr_writer :session_user_id ... end class Item < ActiveRecord::Base has_many :assets, :as => :assetable, :dependent => :destroy ... end 但我得到错误消息: “3”的未定义方法“资产”:字符串 我觉得我已经尝试了所有的变化。如何做到这一

我有以下模型结构

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

class Item < ActiveRecord::Base
  has_many :assets, :as => :assetable, :dependent => :destroy
  ...
end
但我得到错误消息:

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


我觉得我已经尝试了所有的变化。如何做到这一点?

我在这里猜测,但是如何使用值而不是每个带有索引的\u呢

params[:item][:assets_attributes].values do |y|
  y.asset.session_user_id=12
end

所以,有两件事

首先,
散列
上调用每个带有索引的\u将为您提供。因为您将获得

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
所以,如果你只是想搞乱这些价值观,那么我建议你采用这种方法。但这就引出了我们的第二个问题。访问
散列
;您需要使用括号
[]
而不是方法调用来完成

总的来说应该是这样的

params[:item][:assets_attributes].values.each do |y|
  y[:session_user_id] = 12
end

隐马尔可夫模型。。。这似乎不起作用。我只是想获取与资产相关联的用户id。答案不应该这么难,这是有道理的,但它不起作用:-(我用的是回形针。可能不带任何资产试试?我重新阅读了你的问题,我认为
资产
是一个嵌入式模型。现在我意识到它实际上是
资产
的一个属性。所以你只需将[:资产]从
散列
索引中去掉即可。
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
params[:item][:assets_attributes].values.each do |y|
  y[:session_user_id] = 12
end