2016-04-22 2 views
1

Я новичок в рельсах и любую помощь или посоветуйте была бы оцененаДать Scope, содержащий метод - Rails 4

  • я пытаюсь написать сферу, которая отображает пользователей с рейтингом больше или равно 4. I я не уверен, почему моя сфера не работает, и ваша помощь была бы оценена

user.rb

scope :ratings_equal_and_greater_than_4, where('average_rating_final_score >= 4') 

def average_rating_final_score 
    if self.average_rating_score == 1.0 
     1 
    elsif self.average_rating_score == 2.0 
     2 
    elsif self.average_rating_score == 3.0 
     3 
    elsif self.average_rating_score == 4.0 
     4 
    elsif self.average_rating_score == 5.0 
     5 
    else 
     self.average_rating_score 
    end  
    end 

    def average_rating_score 
    ratings_total.to_f/ratings_count 
    end 

область работает хорошо, когда написано так:

<% if user.average_rating_final_score >= 4 %> 
    # display users with ratings equal to or greater than 4 star 
<% end %> 

, но я хотел бы написать что-то подобное в моих взглядах

@users.ratings_equal_and_greater_than_4 

мог один любезно сообщить мне, как написать это правильно, как scope

ответ

2

Rails scopes - это AREL - вид рубинового обернутого sql. Это означает, что вы не можете назвать код рубиновый из SQL ИНЕКЕ следующим образом:

where('average_rating_final_score >= 4') 

Но вы можете определить метод класса, который будет работать, как вы хотите:

def self.ratings_equal_and_greater_than_4 
    all.reject{ |record| record.average_rating_final_score < 4 } 
end 

Также вы можете написать Проппер SQL запрос:

where('(`table_name.ratings_total`/`table_name.ratings_count`) >= 4') 
+0

спасибо soo много! @rootatdarkstar – ARTLoe

Смежные вопросы