好的,所以我正在开发一个书评网站。我想显示某个作者对所有书籍的平均评分。这就是我目前所拥有的,它有效,但必须有更好的方法。
<% @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
^