我创建了一个带有投票字段的想法数据库。我希望用户能够按一个按钮来增加一个想法的投票数,然后刷新屏幕。我创建了一个名为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
当前正在导致错误,但正在增加表中第一个想法的投票。
有人可以帮忙吗?
答案 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