嵌套表单/模型:仅返回属于current_user

时间:2015-05-19 02:13:27

标签: ruby-on-rails ruby-on-rails-3

我有一个音乐评论网站,有3位管理员。每当我们去编辑相册时,它会为reviews提取嵌套表格,如果有的话,它会显示albums#edit上的所有评论记录,无论给定记录的作者/所有者是谁

如何限制返回的reviews仅适用于current_user,并且仍然可以正确构建其嵌套表单字段?

我尝试创建一个范围但是因为我正在调用

@albums.reviews.build

这不起作用。我改为使用快速方法来提取与album相关联的所有评价,并检查传递给该方法的user的ID是否与评论的user_id字段相匹配,但随后Rails抱怨无法调用数组上的构建。

我也尝试过:

@album.reviews.where(user_id: current_user.id).build

但是,即使是我已经评论过的专辑,也没有任何内容出现。

这似乎应该很容易做到,但我不能,因为我的生活,想出来。

2 个答案:

答案 0 :(得分:1)

您的字段分配位置错误。尝试这样的事情:

@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

答案 1 :(得分:0)

我意识到我正以错误的方式接近这一点。由于我已经使用隐藏字段来设置用户ID,因此我在嵌套表单字段周围添加了一个简单的if语句:

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

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

感谢您的帮助@ ryan-k!