2017-03-29 7 views
0

私は反復でhas_manyリレーションから特定のデータを表示しようとしています。nullの「未定義メソッド」はなぜですか?Railsの文字列ですか?

RailsにはNull:Stringの未定義メソッドが表示されるのはなぜですか?

NoMethodError (undefined method `rated' for "shop_date is not null":String)

# controller Cast  
def cast  
    @products = Product.all 
    @rating = Product.joins(:shops).where(:shops => ('shop_date is not null').rated.average(:b_rating) || 0) 
end 

# Model Shop 
belongs_to :product 

attr_accessible :b_rating,:product_id 

scope :by_participant, -> { where('shop_date is not null').order('shop_date desc') } 

scope :rated, -> { where('b_rating is not null') } 

def self.average_rating 
    by_participant.rated.average(:b_rating) || 0 
end 

# Model Product 
Has_many :shops 
+0

: 'ここで、( ) ' – DiodonHystrix

+0

Diodon、かっこが正しい! – nakapaka1

答えて

0

私は最も簡単な方法は、ユーザーgroup byクエリにある、とします)のお店=>( 'shop_dateがnullでない':私はあなたが括弧を閉じるのを忘れて推測

# controller 
@products = Product.all 
products_ids = @products.collect(&:id) 
@ratings = 
    Shop.where(product_id: products_ids). 
    where('shop_date is not null').rated. 
    group(:product_id). 
    average(:b_rating) 

# view 
<% @products.each do |product| %> 
    Rating: <%= @ratings[product.id] || 0 %> 
<% end %> 
+0

ok!私は – nakapaka1

+0

はありがとうIIyaラブロフそれを試すつもりが、示しています。 \t と、ArgumentError(1+の引数の数が間違っ(0) – nakapaka1

+0

は申し訳ありませんが、私は最後のブラケットを取り外すのを忘れて更新されたバージョンをお試しください –

関連する問題