我已經重寫了這個問題,因爲另一個看起來太冗長了。我有以下模型結構,並且有興趣上傳一組文件(通過構建器每次2個)。我不知道,如果多態RELAT嵌套屬性並與窗體哈希交互並將user_id設置爲current_user.id
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。
THX
編輯#1
使用Rails 3.1
編輯,我已經注意到2
的一件事是,如果我在設置一個實例變量循環,然後將其調試到視圖中,但沒有設置,這意味着此循環甚至沒有運行。
item[:assets_attributes].values do |v|
v[:user_id]=3
@a="here is a string"
end
我還更新了項目模型,其中包含項目類的相應attr_accessible。
thx Shaun,我有attr_accessible(更新上面)的user_id和我使用的Rails 3.1 - 我敢肯定有一個語法問題迭代資產。也許分配asset.user是有道理的,然後在default_values before_save中賦值'self.user_id = self.user.id'? – timpone 2012-03-24 15:00:14
分配asset.user與將asset.user_id設置爲該用戶的ID相同。你不需要顯式設置user_id - Rails會處理它。 – Shaun 2012-03-25 19:36:48