2016-04-30 8 views
1

私はRailsで関数を使用しようとしますが、私は同じエラーが発生し続けます。私はすべてのビットを試してみました!レールで関数を呼び出す

私のモデルでは、この関数を定義します。それは大きな計算ですが、私はそれを完全に簡素化しても、同じエラーが発生します!!

私のモデルでMy機能: オリジナル機能:

class Customer < ActiveRecord::Base 
    belongs_to :partner 

    # 
    public 
    def find_next_user_value(user_sequence) 
    last_user_value = User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.last_used } 
    user_prefix = User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.user_sequence_prefix } 
    user_length = User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.user_sequence_length } 
    User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.user_sequence_prefix } + number_to_string(User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.last_used } +=1).ljust(User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.user_sequence_length } - User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.user_sequence_prefix }.bytesize,"0") 
    end 
end 

簡体字版:

class Customer < ActiveRecord::Base 
    belongs_to :partner 

    # 
    public 
    def find_next_user_value 
    "TEST2" 
    end 
end 

コントローラからの呼び出し:簡素化

def new 
    @customer = Customer.new(partner_id: @partner.id, customer_name: @partner.name, partner_number: @partner.number, number: @customer.find_next_user_value("Customer_Number")) 
    end 

両方の場合

私は同じエラーを取得:

undefined method `find_next_user_value' for nil:NilClass

は私が間違って何をしているのですか?

ありがとうございます!!!!!

答えて

2

@customerが定義される前に@customer.find_next_user_valueと呼んでいます。おそらくfind_next_user_valueをクラスメソッドとして定義することを意味しましたか?

ので、def self.method_name(args)を使用する場合:

def self.find_next_user_value 

そして、あなたのコントローラで:

Customer.find_next_user_value("Customer_Number") 
0

ここでは、顧客オブジェクトが作成される前でも、メソッドを呼び出しているが。だからあなたはその方法を見つけられません。

after_saveをコールバックすると、顧客オブジェクトの作成後に必要な番号フィールドが更新されます。

class Customer < ActiveRecord::Base 
 
    belongs_to :partner 
 

 

 
    after_save :update_number_field 
 

 
    def update_number_field 
 
    \t self.number = self.find_next_user_value("Customer_Number") 
 
    \t self.save 
 
    end 
 

 
    
 
    public 
 
    def find_next_user_value(user_sequence) 
 
    last_user_value = User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.last_used } 
 
    user_prefix = User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.user_sequence_prefix } 
 
    user_length = User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.user_sequence_length } 
 
    User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.user_sequence_prefix } + number_to_string(User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.last_used } +=1).ljust(User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.user_sequence_length } - User_Sequences.where(:user_sequence_name=> user_sequence).map{|element| element.user_sequence_prefix }.bytesize,"0") 
 
    end 
 
end

+0

あなたはコードのその平和はただ何wordtに説明してもらえますか?私は新しく、まだ学んでいます....ありがとう! – RORStarter

+0

これは試しましたか? – Sravan

関連する問題