0

好的,所以我正在开发一个书评网站。我想显示某个作者对所有书籍的平均评分。这就是我目前所拥有的,它有效,但必须有更好的方法。

<% @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 非常感谢您提供的任何帮助。

编辑 在第一次回答后添加我更新的类文件。
作者.rb

class Author < ActiveRecord::Base
attr_accessible :a1stname, :asurname
has_many :books
has_many :reviews :through => :books
def afull_name
"#{asurname}, #{a1stname}"
end
end

书本.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 
                             ^  
4

1 回答 1

1

如果关系是

author has_many :books 
book has_many :reviews

添加

author has_many :reviews :through => :books #uses a inner join

可以用作

author.reviews.average(:ratings)
于 2012-11-04T03:28:52.800 回答