Rails未直接关联的模型的嵌套属性

时间:2017-03-22 17:03:13

标签: ruby-on-rails activerecord

我正在构建一个功能,其中多个模型(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

1 个答案:

答案 0 :(得分:1)

在强参数中它应该是复数,因为Rails查看数据库表,而不是模型和数据库表以复数形式命名。

结果应该是:

{{1}}

相关问题