嵌套 forms/models:return 只有属于 current_user 的记录
Nested forms/models: return only records belonging to current_user
我有一个音乐评论网站,有 3 位管理员。每当我们去编辑相册时,它都会拉入 reviews
的嵌套表单,如果有的话,它会显示 albums#edit
上的所有评论记录,无论给定的 author/owner 是谁记录是。
如何将返回的 reviews
限制为仅用于 current_user
,并且仍然正确构建它们的嵌套表单字段?
我已经尝试创建一个范围,但是因为我正在调用
@albums.reviews.build
那是行不通的。相反,我采用了一种快速方法来提取与 album
关联的所有评论,并检查传递给该方法的 user
的 ID 是否与评论的 user_id
字段匹配,但是 Rails 抱怨无法在数组上调用构建。
我也试过:
@album.reviews.where(user_id: current_user.id).build
但那时什么也没有出现,即使在我评论过的专辑中也是如此。
这似乎是一件很容易做的事情,但我这辈子都弄不明白。
您的字段分配位置错误。尝试这样的事情:
@album.reviews.build(user_id: current_user.id)
当您实际提交表单时,您仍然需要将 user_id
放入 permit
语句中,但这应该可以让您继续。
编辑:
好的,所以我想我知道出了什么问题。您还需要创建一个隐藏字段:
<%= nested_form.hidden_field :user_id, value: current_user.id %>
这样,user_id
将与 params
一起传入。您仍然需要在 permit
语句中添加 user_id
。
我意识到我的做法是错误的。因为我已经在使用隐藏字段来设置用户 ID,所以我在嵌套的表单字段周围放置了一个简单的 if 语句:
<% if f.object.user_id == current_user.id || f.object.user_id.nil? %>
现在编辑相册时只看到我的评论,我可以成功创建一个新的,然后再去编辑相册时也能看到那个。
感谢@ryan-k 的帮助!
我有一个音乐评论网站,有 3 位管理员。每当我们去编辑相册时,它都会拉入 reviews
的嵌套表单,如果有的话,它会显示 albums#edit
上的所有评论记录,无论给定的 author/owner 是谁记录是。
如何将返回的 reviews
限制为仅用于 current_user
,并且仍然正确构建它们的嵌套表单字段?
我已经尝试创建一个范围,但是因为我正在调用
@albums.reviews.build
那是行不通的。相反,我采用了一种快速方法来提取与 album
关联的所有评论,并检查传递给该方法的 user
的 ID 是否与评论的 user_id
字段匹配,但是 Rails 抱怨无法在数组上调用构建。
我也试过:
@album.reviews.where(user_id: current_user.id).build
但那时什么也没有出现,即使在我评论过的专辑中也是如此。
这似乎是一件很容易做的事情,但我这辈子都弄不明白。
您的字段分配位置错误。尝试这样的事情:
@album.reviews.build(user_id: current_user.id)
当您实际提交表单时,您仍然需要将 user_id
放入 permit
语句中,但这应该可以让您继续。
编辑:
好的,所以我想我知道出了什么问题。您还需要创建一个隐藏字段:
<%= nested_form.hidden_field :user_id, value: current_user.id %>
这样,user_id
将与 params
一起传入。您仍然需要在 permit
语句中添加 user_id
。
我意识到我的做法是错误的。因为我已经在使用隐藏字段来设置用户 ID,所以我在嵌套的表单字段周围放置了一个简单的 if 语句:
<% if f.object.user_id == current_user.id || f.object.user_id.nil? %>
现在编辑相册时只看到我的评论,我可以成功创建一个新的,然后再去编辑相册时也能看到那个。
感谢@ryan-k 的帮助!