首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails模型设计

Rails模型设计
EN

Stack Overflow用户
提问于 2014-07-22 08:42:30
回答 2查看 45关注 0票数 1

我想创建一个类似于reddit的模型,用户可以在其中向上投票或否决一个链接或文章。我很难理解这个问题:我如何制作我的模型,使用户只喜欢向上或向下的链接一次,并能够改变他们的地雷(切换到否决),但永远不能投票多次,无论多少时间已经过去/注销并不重要。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-22 08:58:39

has_many :通过

你会创造出这样的东西:

代码语言:javascript
复制
#app/models/post.rb
Class Post < ActiveRecord::Base
   has_many :votes do
      def user(user)
         find_by user_id: user.id
      end
   end
   has_many :voters, through: votes, class_name: "User", foreign_key: "user_id"
end

#app/models/vote.rb
Class Vote < ActiveRecord::Base
   belongs_to :post
   belongs_to :user
end

#app/models/user.rb
Class User < ActiveRecord::Base
   has_many :votes
   has_many :posts, through: :votes
end

标准has_many :through关系--使您能够使用join model将两个或多个其他模型关联在一起:

--

用户

这将允许您调用以下内容:

代码语言:javascript
复制
#app/views/posts/show.html.erb
<% if @post.votes.user(current_user).present? %>
    <% link_path = @votes.votes.user(current_user).value == "up" ? vote_down_path : vote_up_path %>
    <%= link_to "Vote", link_path %>
<% else %>
    # empty vote link
<% end %>

棘手的一点是将一次投票与单个用户关联起来--因此,我为您的ActiveRecord关联扩展关联添加了一个votes

票数 2
EN

Stack Overflow用户

发布于 2014-07-22 08:53:32

你可以利用人际关系来捕捉这个..。

  • 一篇文章有很多票
  • 投票属于用户
  • 投票只有一条
  • 一篇文章有许多选民(用户)通过投票,但他们必须是独特的。(验证规则)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24882679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档