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

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 
                             ^  
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 に答える