1

我的模型:多態嵌套形式回形針對Rails 3.1.3

class NewsItem < ActiveRecord::Base 
    has_many :file_uploads, :as => :uploadable 
    accepts_nested_attributes_for :file_uploads, :allow_destroy => true 
end 


class FileUpload < ActiveRecord::Base 
    belongs_to :uploadable, :polymorphic => true 
    has_attached_file :upload, :styles => {:thumb => '100x100>'} 
end 

表單代碼(嵌套NewsItem)

... 

<%= f.fields_for :file_uploads do |upload| %> 
    <div class="file_upload"> 
    <%= upload.file_field :upload %> 
    </div> 

    ... 

<% end %> 

... 

在提交時我得到以下錯誤:「未知屬性:上傳」。這裏是參數:

{"utf8"=>"✓", 
"authenticity_token"=>"MBfxJ4XTizCXv3Mpu971VHCm60bS3Y84Kdxfe+VJD2w=", 
"news_item"=>{"title"=>"", 
"body"=>"", 
"published_date"=>"", 
"file_uploads_attributes"=>{"0"=>{"upload"=>#<ActionDispatch::Http::UploadedFile:0x000001070112a8 @original_filename="rails-dd352fc2630e5f9aa5685ef1d7fe5997.png", 
@content_type="image/png", 
@headers="Content-Disposition: form-data; name=\"news_item[file_uploads_attributes][0][upload]\"; filename=\"rails-dd352fc2630e5f9aa5685ef1d7fe5997.png\"\r\nContent-Type: image/png\r\n", 
@tempfile=#<File:/var/folders/hb/2bkct63171lck8d3sg0xfq0c0000gn/T/RackMultipart20111204-3216-71in7a>>, 
"name"=>"", 
"caption"=>""}}}, 
"commit"=>"Create News item"} 

我使用Rails的3.1.3和回形針「〜> 2.4」。

+0

我想你需要先構建一個file_upload對象,然後才能在nested_form中使用它。另外,也許你需要添加attr_accessible:file_uploads_attributes(不知道多態是如何工作的)。 – yoavmatchulsky

回答

0

重新啓動rails應用程序解決了這個問題。我猜我安裝了寶石,但沒有重新啓動,導致上述錯誤。獲得的經驗:安裝寶石後總是重新啓動。

1

我會避免使用類似「可上傳」的通用術語,因爲結果術語「上傳」可能會發生碰撞。

youavmatchulsky的建議也很好 - 如果你有attr_accessible任何地方,你也需要使file_uploads_attributes可以訪問。

此外,PARAMS不看等形式爲多,所以我強迫它:多=>在調用真實的form_for

編輯:儘管這是應該,自動將發生,你可能不得不明確accept_nested_attributes_爲加入,然後在加入模型accept_nested_attributes_for:uploadable - 我發現anaf很奇怪,像多態聯接有時