使用link_to在控制器中触发增量操作

时间:2015-05-03 08:42:34

标签: ruby-on-rails

我一直在靠墙试图找出这个傻瓜。

基本上,我有一个'引用'包含3个字段的模型 - content,author和votecount。

Votecount是一个整数,我希望能够使用链接从引号/索引视图添加投票(增量)。这是我到目前为止所提出的:

视图/报价/ index.html.erb

<% @quotes.each do |quote| %>
  <tr>
    <td><%= quote.content %></td>
    <td><%= quote.author %></td>
    <td><%= quote.votecount %></td>
    <td><%= link_to 'Show', quote %></td>
    <td><%= link_to 'Edit', edit_quote_path(quote) %></td>
    <td><%= link_to 'Upvote', quote_upvote_path(quote) %></td>
    <td><%= link_to 'Destroy', quote, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>

quotes_controller.rb

  def upvote
    @quote = Quote.find(params[:id])
    @quote.increment!(:votecount)
    redirect_to quotes_path
  end

的routes.rb

  resources :quotes do
    get 'upvote'
  end

这是我收到的错误消息:

ActiveRecord::RecordNotFound in QuotesController#upvote
Couldn't find Quote with 'id'=

因此,该操作无法找到报价ID,但是它在实际的网址中,所以我不确定我在这里搞砸了什么!

1 个答案:

答案 0 :(得分:0)

将upvote动作定义为成员动作:

resources :quotes do
  get 'upvote', on: :member
end

有关详细信息,请参阅Rails routing documentation