我正在尝试向我的控制器发送一个:up参数'up',以便它执行current_user.vote_exclusively_for(@book)的投票功能。我正在使用竖起大拇指。
我正在尝试使用link_to执行此操作,并且正确的参数显示在我的服务器输出中,但它不能与控制器一起使用。我一定是做错了,但我不确定是什么。我需要做一些与书籍不同的路线:资源吗?
这是我在books_controller中的投票行动
def vote
@book = Book.find(params[:id])
if params[:vote] == 'up'
current_user.vote_exclusively_for(@book)
end
redirect_to @book
end
这是我视图中的link_to示例:
<%= link_to "Vote Up", :url => { :controller => "books", :action => "vote", :vote => "up"}, :method => :post %>
关于我的尝试失败的任何建议都将非常感激(额外注意:当我在我的视图中放置current_user.vote_exclusively_for(@book)函数时它有效)所以我认为这是一个视图/ routes / link_to问题,而不是功能本身。
答案 0 :(得分:3)
我不明白你的link_to。它似乎错过了它投票的书的ID?
确保您的routes.rb文件如下所示:
resources :books do
post :vote, :on => :member
end
然后将link_to函数更改为:
link_to "Vote Up", vote_book_path(@book, :vote => "up"), :method => :post
答案 1 :(得分:0)
我遇到了类似的问题并使用这种样式语法解决了这个问题:
<%= link_to "Vote Up", {:controller => "books", :action => :vote, :vote => "up" }, {:method => :post} %>
还要确保您的routes.rb与
类似resources books do
post :vote
end