在Rails中,可以通过使用数据库和模型来实现获得两个数字之间的投票的帖子。以下是一个可能的实现方式:
- 创建一个名为"Post"的模型,用于表示帖子。可以使用以下命令生成模型文件和数据库迁移:rails generate model Post title:string content:text votes:integer
rails db:migrate
- 在生成的"app/models/post.rb"文件中,添加以下代码来定义模型之间的关系:class Post < ApplicationRecord
has_many :votes
end
- 创建一个名为"Vote"的模型,用于表示投票。可以使用以下命令生成模型文件和数据库迁移:rails generate model Vote post:references value:integer
rails db:migrate
- 在生成的"app/models/vote.rb"文件中,添加以下代码来定义模型之间的关系:class Vote < ApplicationRecord
belongs_to :post
end
- 在帖子的视图中,可以使用表单来接收用户的投票。例如,在"app/views/posts/show.html.erb"文件中,可以添加以下代码:<%= form_with(model: [@post, @post.votes.build], local: true) do |form| %>
<%= form.hidden_field :value, value: 1 %>
<%= form.submit "Vote Up" %>
<% end %>
<%= form_with(model: [@post, @post.votes.build], local: true) do |form| %>
<%= form.hidden_field :value, value: -1 %>
<%= form.submit "Vote Down" %>
<% end %>
- 在帖子的控制器中,可以处理投票的逻辑。例如,在"app/controllers/posts_controller.rb"文件中,可以添加以下代码:class PostsController < ApplicationController
def show
@post = Post.find(params[:id])
end
def vote
@post = Post.find(params[:id])
@vote = @post.votes.build(vote_params)
if @vote.save
redirect_to @post, notice: "Vote submitted successfully."
else
redirect_to @post, alert: "Failed to submit vote."
end
end
private
def vote_params
params.require(:vote).permit(:value)
end
end
- 在路由文件中,将投票的动作映射到相应的控制器动作。例如,在"config/routes.rb"文件中,可以添加以下代码:Rails.application.routes.draw do
resources :posts do
post 'vote', on: :member
end
end
现在,当用户在帖子页面点击"Vote Up"或"Vote Down"按钮时,将会创建一个新的投票对象,并与相应的帖子关联起来。你可以根据需要进一步扩展和优化这个实现,例如添加用户认证、计算帖子的总投票数等功能。
腾讯云相关产品和产品介绍链接地址: