我正在构建一个功能,其中多个模型(3 +)将具有与之关联的图像或文档。为了减少重复代码,我创建了一个MediaUploads
模型belongs_to :user
,导致用户has_many :media_uploads
。
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
需要从用户发生,考虑到MediaUpload
引用了user_id
有人能给我一些指示吗?
更新
这是我目前没有用的东西:
在我的 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
答案 0 :(得分:1)
在强参数中它应该是复数,因为Rails查看数据库表,而不是模型和数据库表以复数形式命名。
结果应该是:
{{1}}