我有一个页面显示了另一个用户发布的帖子,而且我能够做到这一点,如果你去索引,它只显示当前用户user_id的user_id =的帖子。但是,如果我转到网址并更改帖子号码,我可以看到其他用户发帖甚至编辑它们。我尝试更改控制器显示@time_sheets = TimeSheet.where(:user_id => current_user.id)find(params[:id])
并尝试在视图中使用<% if @time_sheet.user_id == @currentuser.id %>
,但似乎都不起作用。我做错了什么?
答案 0 :(得分:2)
如果用户尝试访问其他用户的网页,您可以使用before_filter并将用户重定向到主页并显示错误消息。
before_filter :validate_user
def validate_user
timesheet_user_id = Timesheet.find(params[:id]).user_id
redirect_to :root, :alert => "Unauthorized" unless timesheet_user_id == current_user.id
end
您可以阅读有关过滤器here
的更多信息答案 1 :(得分:-2)
在控制器中,您应该:
@time_sheet = TimeSheet.where(user_id: current_user.id).find(params[:id])
或者,如果您有关联用户has_many时间表:
@time_sheet = current_user.time_sheets.find(params[:id])
它应该有用。
顺便说一句,你当然应该在调用这段代码之前检查是否有人登录。