嵌套 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 的帮助!