嵌套表单/模型:只返回属于current_user的记录



我有一个音乐评论网站,有3个管理员。当我们编辑一个专辑时,它会拉入reviews的嵌套表单,如果有的话,它会显示albums#edit上的所有评论记录,而不管给定记录的作者/所有者是谁。

我怎样才能限制reviews返回仅为current_user,仍然有他们的嵌套表单字段正确构建出来?

我已经尝试创建一个作用域,但由于我调用

@albums.reviews.build

这行不通。相反,我做了一个快速的方法,拉出与album相关的所有评论,并检查传递给方法的user的ID是否与评论的user_id字段匹配,但随后Rails抱怨不能在数组上调用build。

我也试过:

@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一起传递。您仍然需要将user_id放在permit语句中。

我意识到我处理这件事的方式是错误的。因为我已经使用了一个隐藏字段来设置用户ID,所以我在嵌套的表单字段周围放置了一个简单的if语句:

<% if f.object.user_id == current_user.id || f.object.user_id.nil? %>

现在我在编辑相册时只能看到我的评论,我可以成功创建一个新的,然后当我再次编辑相册时也可以看到那个。

谢谢你的帮助@ryan-k!

相关内容

最新更新