我正在構建一個功能,其中幾個模型(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
謝謝J.D但它並沒有解決我的問題。我用我的確切設置更新了我的問題,導致了問題(包括您的更改) – Torrm
我之前沒有使用'file_field',但我認爲您不需要'f.fields_for'塊。你的錯誤表明這正是不被允許的。試試簡單的'f。 file_field:filename,class:「btn-file」' –
或者如果您要在此表單中創建新的:media_uploads對象的記錄,則應該創建它。如果直接在表單中,例如'<%= f.fields_for:media_uploads,post.media_uploads.build do | h | %>' –