我正在使用Rails和Activerecord,并尝试在我的视图中将相关表中的一些数据合并在一起,这是我的模型:
class Report < ActiveRecord::Base
has_many :votes
end
class Vote < ActiveRecord::Base
belongs_to :reports
end
class User < ActiveRecord::Base
has_many :votes
end
每次投票都有一个用户和一份报告。
在我看来,我需要以下内容,希望尽可能轻松:
现在,我对ActiveRecord查询的基本理解只需要我使用报告和当前user
创建帮助,而不是查询{{1}的存在}
同样可以计算report
所有用户的总投票数,如下所示:
控制器
report
查看
def index
#this is where I need some help to get the related information into a single
#object
@reports = Report.where('...')
end
辅助
<% @reports.each do |report| %>
<% if(hasVoted(@current_user.id, report.id)) %>
<!-- display the 'has voted html' -->
<% end %>
<% end %>
希望能为您提供一些帮助......谢谢!
答案 0 :(得分:1)
不确定
首先,请考虑命名你的方法has_voted?而不是hasVoted。其次,考虑在用户模型中移动该方法。
#user.rb
def voted_on?(report_id)
votes.where(:report_id => report_id).exists?
end
您的视图将会读取
<% if current_user.voted_on?(report) %>
...
<% end %>
您遇到的另一个问题是查找报告收到的投票数。这也很简单。您可以在循环中的视图中执行此操作,在循环中迭代@reports
<% vote_count = report.votes.size %>
请记住,他会导致N次查询(其中N =报告数量)。由于您是Rails的新手,我不会在您获取报告的控制器中使报告复杂化,以包括投票计数(除非您要求我)。但是一旦你对这里发生的事情感到满意,那就是你要优化的地方。