为什么这个link_to方法会重定向到我的根路径?
用户控制器:
def show
@user = User.find(params[:id])
@user.comments.build
@comment = Comment.new
@user.votes.build
@vote = Vote.new
end
def vote:
@comment = Comment.find(params[:id])
Vote.create!(voteable_id: params[:id], voteable_type: 'Comments')
@user = User.find(params[:id])
redirect_to @user
end
用户查看:
<%= link_to "vote", vote_comment_path(:id => comment.id), method: :post, :class=> "btn %>
routes.rb中:
post 'comments/:id/vote' => 'comments#vote', as: 'vote_comment'
resources :users do
resources :comments
resources :ratings
resources :votes
end
我期待点击投票重定向回用户,而是转到我的主页。
我可以在同一方法下两次使用params[:id]
吗?
答案 0 :(得分:1)
致电时
vote_comment_path(:id => comment.id)
它将comment.id
传递给方法,该方法检索为params[:id]
。
如果params[:id]
的值为comment.id
,则:
def vote
# ...
@user = User.find(params[:id]) # look up user by comment.id - BAD!
redirect_to @user # wrong user!
end
您正在通过注释ID查找用户,而不是用户ID。
如果当前用户用户1 但评论为评论5 ,则您将被重定向到用户5 ,与评论相同的ID。
我猜测有一些授权检查会将您转发回root(例如,以用户1 身份登录时不允许查看用户5 )。检查日志以查看重定向发生的位置。
这可能是相关的,但正确的构建方式是这样的:
def show
@user = User.find(params[:id])
@comment = @user.comments.build
@vote = @user.votes.build
end