0
rails version 4.2.6 

Я пытаюсь создать компонент флажка в представлении для приложения Rails с использованием HAML.метод класса, определенный в модели, не отображающийся в контроллере

Соответствующий код вида:

= form_tag movies_path, :method => :get do 
    Include: 
    - @all_ratings.each do |rating| 
    = rating 
    = check_box_tag "ratings[#{rating}]" 
    = submit_tag 'Refresh' 

метод управления, «индекс», что делает этот вид предполагается создать переменный экземпляр «@all_ratings», который просто перечислима коллекция всевозможных рейтингов фильмов (["G", "PG", "PG-13", "R"]).

Соответствующий код контроллера:

def index 
    @movies = Movie.order(params[:sort_by]) 
    @sort_column = params[:sort_by] 
    @all_ratings = Movie.all_ratings 
end 

Метод «all_ratings» не является методом класса модели «Movie», который я создал с:

class Movie < ActiveRecord::Base 
    attr_accessible :title, :rating, :description, :release_date 

    def self.all_ratings 
     Movie.select(:rating).uniq.map { |movie| movie.rating }.sort 
    end 
end 

Независимо от того, что я стараюсь я продолжаю получите ошибку:

NoMethodError in MoviesController#index 
undefined method `all_ratings' for #<Class:0x000000047bcab0> 

Здесь я исследовал несколько подобных ошибок, и они обычно кажутся t o быть связанными с созданием ошибок метода класса или экземпляра. Однако ни одно из средств защиты, которые работали для этих людей, не работало для меня до сих пор. Кажется, что никакие изменения, которые я делаю в модели, никогда не доступны для контроллера.

Большое спасибо.

ответ

0

я, наконец, понял это. У меня было два файла под названием «movie.rb» в отдельных проектах, и я редактировал неправильный. Я чувствую, что это эквивалентно тому, чтобы отвлечь ваше телевидение, чтобы исправить это, и узнав, что вы только что забыли подключить его.: |

0

Есть три подхода вызвать метод модели в контроллере:

Samlpe.rb

class Sample < ActiveRecord::Base 

    ##exactly the same as defining a class method 
    scope :mehtod1, -> { where(some_attribute: true) } 

    ##class method 
    def self.method2 
    #code for method2 
    end 

    ##instance method3 
    def method3 
    #code for method3 
    end 
end 

SamplesController.rb

def index 
    @from_method1 = Sample.method1 
    @from_method2 = Sample.method2 
    @from_method3 = @from_method1.method3 
end 
+0

Хмммм хорошо, мне кажется, я использовал метод два точно, и это не имеет никакого эффекта. :/Может быть, некоторая команда, которую я должен запустить после внесения изменений в модель? –

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