好的,我正在写一本书评网站。 我想显示一位证书作者对所有书籍的平均评分。这就是我目前的工作方式,但必须有更好的方法。
<% @author.books.each { |book| book.reviews.each { |review| x = x + review}} %>
<% @author.books.each { |book| book.reviews.each { |review| y = y +1}} %>
<%= x/y %>
我能做到
<% @book.reviews.average(:ratings) %>
但必须有一个更优雅的选项,类似于
<% @author.books.reviews.average(:ratings) %>
可悲的是,上述命令即使不起作用
<% @author.books.count %>
确实如此。
使用Ruby 1.9.2p290和rails 3.2.8 非常感谢您提供的任何帮助。
编辑 在第一次回答后添加我更新的类文件 author.rb
class Author < ActiveRecord::Base
attr_accessible :a1stname, :asurname
has_many :books
has_many :reviews :through => :books
def afull_name
"#{asurname}, #{a1stname}"
end
end
book.rb
class Book < ActiveRecord::Base
attr_accessible :author_id, :description, :title
belongs_to :author
has_many :reviews
validates :author_id, presence: true
end
现在,当我打电话给@author或Author.find时,我得到了
syntax error, unexpected ":", expecting keyword_end
has_many :reviews :through => :books
^
答案 0 :(得分:1)
如果关系是
author has_many :books
book has_many :reviews
添加
author has_many :reviews :through => :books #uses a inner join
可以用作
author.reviews.average(:ratings)