2012-03-05 10 views
1

インスタンスを保存する前に主キーを設定するためにfilterを使用しています。ここでbefore_filterを作成する前に主キーを設定する

は私のコントローラのメソッドです:

class ReferencesController < ApplicationController 

before_filter :set_primary_key, :only => [:create_sub_reference] 

    def create_sub_reference  
    @reference = Reference.new(params[:reference]) 
    respond_to do |format| 
    if @reference.save 
     format.js 
    else 
     flash[:notice] = "Reference failed to save." 
    end 
    end 
    end 


    private 

    def set_primary_key 
    result = ActiveRecord::Base.connection.execute('SELECT REF_ID FROM SEQUENCES') 
    inc_result = (result.fetch_row.first) 
    self.REF_ID = inc_result 
    end 

    end 

end 

i「は保存ボタン」をクリックしたときに、私は、ログファイルに次のエラーメッセージを取得しています:上の任意の提案のための

NoMethodError (undefined method `REF_ID=' for #<ReferencesController:0xb69f4ca8>): 

感謝をこの問題

+0

ここでは、あなたが意味する@referenceではなく、コントローラへの '自己参照'があります。 –

+0

私は 'self.REF_ID'を '@ reference.REF_ID'に変更しようとしましたが、無駄でした。私はまだ同じエラーメッセージが表示されます – Kim

答えて

1

あなたのモデルではなく、コントローラ上のREF_ID属性(データベース列とみなします)を設定しようとしています。このコードは、ReferencesControllerのウェブリクエストがアプリに届くたびに呼び出されます。

おそらく、Referencesモデルのロジックをbefore_createフックに移動したかったでしょうか?

+0

提案をありがとう。私のメソッド名は 'create_sub_reference'です、どのように私はこの特定のメソッドのbefore_createを使用するのですか? before_createは 'create'というメソッドにのみ適用されることを理解しています – Kim

+1

'before_create'は、定義されているモデルのオブジェクトが新しいときに保存されるたびにデータベースに書き込む前に呼び出されます。モデルインスタンスの「作成前」は常に実際に動作します。 – Chowlett

+0

ありがとう、私は今それを得る – Kim

関連する問題