我有一个音乐评论网站,有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!