创建一个按钮来更新ruby中的数据库条目

时间:2019-02-24 22:45:12

标签: ruby-on-rails

我创建了一个带有投票字段的想法数据库。我希望用户能够按一个按钮来增加一个想法的投票数,然后刷新屏幕。我创建了一个名为increment_vote的方法,但是似乎找不到如何在数据库中保存新的表决值。这是我的index.html.erb代码的一部分:

<% @ideas.each do |idea| %>
  <tr>
    <td><%= idea.content %></td>
    <td><%= increment_vote(idea) %></td>
    <td><%= link_to 'Vote', ideas_path(:mode => "Vote"), :class => "button", :method => :get %></td>                                      
  </tr>

如果我从链接到投票代码调用增量投票方法,则会收到“ undefined method `to_model' for true:TrueClass. Did you mean to_yaml”错误。

这是我在idea.controller中的方法代码:

helper_method :increment_vote
  def increment_vote(idea)
    idea.votes +=1
    idea.save
   end

当前正在导致错误,但正在增加表中第一个想法的投票。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您无法从视图中调用increment_vote方法,您需要为其创建控制器操作并在用户单击链接时调用它

# views/ideas/index.html.erb
<% @ideas.each do |idea| %>
  <tr>
    <td><%= idea.content %></td>
    <td><%= link_to 'Vote', upvote_idea_path(idea), class: "button", method: :post %></td>                                      
  </tr>
<% end %>

# routes.rb
resources :ideas do
  post :upvote, on: :member
end

# ideas_controller.rb
def upvote
  Idea.find(params[:id]).upvote
  redirect_to :index
end

# models/idea.rb
def upvote
  update(votes: votes + 1)
end