Я переписал этот вопрос, так как другой показался слишком многословным. У меня есть следующая структура модели, и я заинтересован в том, чтобы загружать набор файлов (по 2 за раз через конструктор). Я не уверен, что полиморфный релат
class Item < ActiveRecord::Base
has_many :assets, :as => :assetable, :dependent => :destroy
accepts_nested_attributes_for :assets, :allow_destroy => true, :reject_if => lambda { |a| a[:asset].blank? }
attr_accessible :assets_attributes, :asset
...
end
class Asset < ActiveRecord::Base
belongs_to :assetable, :polymorphic => true
attr_accessible :name, :user_id, :description ...
...
end
Я скопировал всю форму:
<form accept-charset="UTF-8" action="/arc/items/70" class="edit_item" enctype="multipart/form-data" id="edit_item_70" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="_method" type="hidden" value="put" /><input name="authenticity_token" type="hidden" value="NnaCxwmfy2zT8MnN7oNQnOx0xYXkgKUs+NbIh8+8cL4=" /></div>
<div class='files'>
<input id="item_assets_attributes_70_asset" name="item[assets_attributes][70][asset]" type="file" />
<input id="item_assets_attributes_70_description" name="item[assets_attributes][70][description]" size="30" type="text" />
<input id="item_assets_attributes_71_asset" name="item[assets_attributes][71][asset]" type="file" />
<input id="item_assets_attributes_71_description" name="item[assets_attributes][71][description]" size="30" type="text" />
</div>
<input name="commit" type="submit" value="Update Menu item" />
</form>
и вот контроллер для взаимодействия с ним:
class ItemsController < ApplicationController
...
def update
item=params[:item]
item[:assets_attributes].values do |v|
v[:asset][:user_id]=3 # just hard-code it to see if workig
end
if @item.update_attributes(item)
flash[:notice]="Menu Item has been updated #{undo_link}"
else
flash[:notice]="Menu Item has not been updated"
end
end
В моем классе активов никогда не устанавливается user_id. Как бы я сделал эту работу? Я, очевидно, хочу получить current_user.id.
1012 * ТНХ *
edit # 1
Использование Rails 3.1
редактировать 2
Одна вещь, которую я заметил, это то, что если я установил переменную экземпляра в цикле, а затем отладил ее в представлении, он не был установлен, означая, что этот цикл даже не работает.
item[:assets_attributes].values do |v|
v[:user_id]=3
@a="here is a string"
end
Я также обновил модель Предмета с помощью соответствующего атрибута attr_accessible для класса предмета.