好的,所以我正在尝试在Ruby on rails上创建一个reddit样式页面,用户可以在其中提交链接,然后对它们进行upvote / downvote。我为链接生成了一个脚手架,它基本上像博客教程一样工作,然后自定义编写了一个迁移,将一个vote_count:整数列添加到链接表中。然后我进入控制器一个额外的upvote方法(增加links.vote_count)和downvote(减少links.vote_count)和index.erb.html页面,它显示我想要吱吱叫“link_to”的所有链接调用这些方法的按钮。我现在的方式虽然我收到错误:找不到没有ID的链接。
links_controller.rb的相关部分
class LinksController < ApplicationController
before_action :set_link, only: [:show, :edit, :update, :destroy]
# GET /links
# GET /links.json
def index
@links = Link.all
end
def upvote
@link = Link.find(params[:id])
@link.vote_count += 1
end
def downvote
@link = Link.find(params[:id])
@link.vote_count -= 1
end
index.html.erb的相关部分
<tbody>
<% @links.each do |link| %>
<tr>
<td><%= link.vote_count %></td>
<td><%= link_to 'Up', upvote_links_path(link) %></td>
<td><%= link_to 'Down', downvote_links_path(link) %></td>
<td><%= link.title %></td>
<td><%= link.url %></td>
<td><%= link.user_id %></td>
<td><%= link_to 'Show', link %></td>
<td><%= link_to 'Edit', edit_link_path(link) %></td>
<td><%= link_to 'Destroy', link, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
的routes.rb
resources :links do
collection do
get :upvote
get :downvote
end
end
是否有更简单的方法来更新此表值或我做错了什么?
答案 0 :(得分:0)
问题出在您的路线上。由于upvote和downvote方法将作用于链接,因此您需要使用成员而不是集合。
resources :links do
member do
get :upvote
get :downvote
end
end