模型中定义的类方法未显示在控制器中

时间:2016-08-05 22:29:24

标签: ruby-on-rails ruby-on-rails-4 model-view-controller model nomethoderror

rails version 4.2.6

我正在尝试使用HAML在视图中为Rails应用创建一个复选框组件。

相关观点代码:

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

渲染此视图的控制器方法'index'应该创建实例变量“@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”是我创建的“电影”模型的类方法:

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>

我在这里研究了几个类似的错误,它们通常似乎与制作类方法与实例方法错误有关。然而,迄今为止,对这些人都没有的补救办法对我有用。似乎我在控制器中无法访问模型中的任何更改。

非常感谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我终于明白了。我有两个名为&#34; movie.rb&#34;在单独的项目中,我正在编辑错误的项目。我觉得这相当于把你的电视分开来解决它,并发现你只是忘了插上它。:|