首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Activerecord关系

Activerecord关系
EN

Stack Overflow用户
提问于 2012-07-31 05:54:16
回答 1查看 61关注 0票数 0

我正在Rails和Activerecord中工作,并试图将来自相关表的一些数据合并到一起,下面是我的模型:

代码语言:javascript
复制
class Report < ActiveRecord::Base
  has_many :votes
end

class Vote < ActiveRecord::Base
  belongs_to :reports
end

class User < ActiveRecord::Base
  has_many :votes
end

每一次投票都有一个用户和一个报告。

在我看来,我需要以下几点,希望尽可能容易:

  1. 所有用户对每一份报告的总票数
  2. 如果用户已对特定报告进行投票,则为真/假

现在,我对ActiveRecord查询的基本理解仅限于使用报表和当前user创建助手,而不是查询report的存在。

计算report所有用户的总票数也是如此,如下所示:

控制器

代码语言:javascript
复制
def index
  #this is where I need some help to get the related information into a single
  #object
  @reports = Report.where('...')
end

视图

代码语言:javascript
复制
<% @reports.each do |report| %>
    <% if(hasVoted(@current_user.id, report.id)) %>
        <!-- display the 'has voted html' -->
    <% end %>
<% end %>

Helper

代码语言:javascript
复制
def hasVoted(current_user_id, report_id)
    if(Vote.exists?(:user_id => current_user_id, :report_id => report_id))
      true
    else
      false
    end      
end

希望这能让你对helping...thanks有一些了解!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-31 06:04:50

好的。

首先,请考虑命名您的方法has_voted?而不是hasVoted。其次,考虑在用户模型中移动该方法。

代码语言:javascript
复制
#user.rb
def voted_on?(report_id)
  votes.where(:report_id => report_id).exists?
end

然后,您的观点将被宣读。

代码语言:javascript
复制
<% if current_user.voted_on?(report) %>
  ...
<% end %>

另一个问题是找出一份报告所获得的票数。这也很简单。您可以在循环中的视图中这样做,在循环中迭代@reports

代码语言:javascript
复制
<% vote_count = report.votes.size %>

请记住,他会导致N个查询(其中N=报告的数量)。由于您是Rails的新手,所以我不会在控制器中将报表查询复杂化,在控制器中获取报告以包含选票计数(除非您要求我这样做)。但是,一旦你对这里发生的事情感到满意,那就是你要优化的地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11733976

复制
相关文章

相似问题

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