通过link_to发布到控制器

时间:2010-12-15 15:09:26

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

我正在尝试向我的控制器发送一个: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问题,而不是功能本身。

2 个答案:

答案 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