来自其他Controller Rails 4模型的错误调用方法未定义方法

时间:2014-01-02 16:22:01

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-4

使用Rails 4.0

我认为我是一个小问题,我创建了一个模型Word.rb,这个模型有一个创建新Word的方法,我的问题是当我尝试使用Word.saveWord(params..)访问此方法时返回一个未定义的方法,我展示文件以便最好地解释:

Word.rb

  class Word < ActiveRecord::Base

  def saveWord(*args)
    args.each do |term|
       @term = Word.new(:name => term,:score => 0)
       @term.save
    end
  end


  before_save :check_repeated


  def check_repeated
    @term = Word.find_by_name(self.name)
    @term.score += 1 if @term.present?
  end

我不知道是否可以从其他控制器使用此方法,因为我尝试使用我的 recipes_controller.rb

def search 
      @recipes = Recipe.search(params[:term],params[:term_1],params[:term_2]) if request.get?

    respond_to do |format|
      format.json { render :json => @recipes,:only => [:id,:name,:rcp_img_file_name,:time] }
      format.xml { render :xml => @recipes }
       # render :xml => @recipes.to_xml(:include => :category)
       #render :xml => @recipes     
    end


      Word.saveWord(params[:term].to_s)


  end  

我给出了这个错误:

undefined method `saveWord' for #<Class:0x007feb3f09bac8>
.. 


      Word.saveWord(params[:term].to_s)


  end  

请有人对我有消化吗?非常感谢。

2 个答案:

答案 0 :(得分:1)

您已将saveWord实现为实例方法,但您尝试将其称为类方法。 您可能需要重新实现此类方法:

def self.save_word(*args)
  args.each do |term|
    @term = Word.new(:name => term,:score => 0)
    @term.save
  end
end

我也更改了这个方法的名称,所以现在它遵循Ruby命名约定。

答案 1 :(得分:0)

您的saveWord是一种实例方法,但您将其称为class方法。由于您在Word方法中实例化了一个新saveWord,因此我假设您希望将其保留为类方法。在这种情况下,将saveWord方法更新为实例方法,如下所示:

class Word < ActiveRecord::Base    
  def self.saveWord(*args)
    args.each do |term|
      @term = Word.new(:name => term,:score => 0)
      @term.save
    end
  end
end