2017-03-22 104 views
0

我正在構建一個功能,其中幾個模型(3+)將具有與它們關聯的圖像或文檔。爲了減少重複代碼,我創建了一個模型MediaUploads,其中belongs_to :user導致用戶has_many :media_uploads模型的Rails嵌套屬性不直接關聯

MediaUploads表將用戶ID與文件信息一起存儲,沒有任何特定於任何其他模型。因此,每個需要圖像的模型都有關聯has_one :media_upload和其數據庫表t.integer "media_uploads_id上的參考列。我認爲這是實現這個目標的適當方式,但是我遇到了一些問題。

上述設置工作正常,如果用戶正在管理他們的媒體,但我很努力使用嵌套窗體這項工作。一個例子,Post這可能需要MediaUpload可能是這樣的:

accepts_nested_attributes_for :media_upload現在,如果我使用byebug並得到params我可以看到文件的詳細信息被列入ActionController::Parameters {"media_uploads"=>{"filename"=>#<...,但使用post_params我可以看到,這是不允許的。我已經加入了這樣的強大參數:...post attributes..., media_upload_attributes: [ :filename ] - 我也試過media_upload和media_uploads。

我的谷歌搜索一直把我帶回改變new方法是這樣的:

@post = Post.new @post.build_media_upload

它給我的錯誤unknown attribute 'post_id' for MediaUpload. - 大概是因爲build需要從用戶發生,考慮到user_id是參考MediaUpload

有人能給我一些指點嗎?

UPDATE

這是我目前不工作:

在我Post.rb我有以下

has_one :media_upload 
accepts_nested_attributes_for :media_upload 

在我_form.html .erb我有

<%= f.fields_for :media_uploads do |h| %> 
    <%= h.file_field :filename, class:"btn-file" %> 
<% end %> 

在我控制器

..post params..., media_uploads_attributes: [ :filename ]) 

使用終端命令params然而當post_params狀態下,我可以看到的數據:Unpermitted parameter: media_uploads

回答

1

應該多在強參數,可以由於Rails看數據庫表,而不是你的模型和數據庫表以複數命名。

所以結果應該是:

...post attributes..., media_uploads_attributes: [ :filename ]

+0

謝謝J.D但它並沒有解決我的問題。我用我的確切設置更新了我的問題,導致了問題(包括您的更改) – Torrm

+0

我之前沒有使用'file_field',但我認爲您不需要'f.fields_for'塊。你的錯誤表明這正是不被允許的。試試簡單的'f。 file_field:filename,class:「btn-file」' –

+0

或者如果您要在此表單中創建新的:media_uploads對象的記錄,則應該創建它。如果直接在表單中,例如'<%= f.fields_for:media_uploads,post.media_uploads.build do | h | %>' –