rails 练习6 --让使用者可以投票

目标

我们要做一个按钮,可以让使用者点击后增加该文章(topic)的投票数(vote)

步骤

步骤1:新增一个controller的action,称之为upvote
编辑app/controllers/topics_controller.rb这个档案,以及将这个底下的mehtod设定放在档案里private这行上面:

def upvote
  @topic = Topic.find(params[:id])
  @topic.votes.create
  redirect_to topics_path
end
  • @topic = Topic.find(params[:id])从数据库中寻找某笔topic的数据,并将它设定成@topic这个变数的值
  • @topic.votes.create将该topic新增一笔vote并存入数据库
  • redirect_to(topics_path)告诉浏览器回到topics_path这个位置(所有文章的页面)

步骤2:帮upvote这个action设定一个新路径(new route)

打开config/routes.rb这个档案,并找到下面这行程序:

resources:topics

将这行程序改成如下:

resources :topics do
  member do
    post 'upvote'
  end
end

可以使用输入rake routes或是前往http://localhost:3000/rails/info来确认upvote是否已加入到route设定里面,你应该会看到下面这行的内容:

这里写图片描述

步骤3:在View上面新增一个按钮
编辑app/views/topics/index.html.erb,加入二行代码

<% @topics.each do |topic| %>
  <tr>
    <td><%= topic.title %></td>
    <td><%= topic.description %></td>
+   <td><%= pluralize(topic.votes.count, "vote") %></td>
+   <td><%= button_to '+1', upvote_topic_path(topic), method: :post %></td>
    <td><%= link_to 'Show', topic %></td>
    <td><%= link_to 'Edit', edit_topic_path(topic) %></td>
    <td><%= link_to 'Destroy', topic, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>
  • pluralize(topic.votes.count,“vote”)可以藉由判断前面变数的数量来显示单数的“vote”或是复数的“votes”
  • button_to ‘+1’建立一个html按钮,内文是’+1`
  • upvote_topic_path(topic)建立一个合适的连接来指向我们想要的action位置,以此例来说,我们希望增加『被点击+1』的那篇topic
    • upvote_topic_path(topic)如果该topic.id是42,则会显示/topics/42/upvote这个网址
  • method::post确保我们是使用CRUD中的Create(建立)的动作,而不是Read(读取)

步骤4:在浏览器上实际操作

前往http://localhost:3000/topics玩玩看

有没有发现,上述的设定不需要重开Rails server,开心吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值