2012-02-25 13 views
2

ここでは簡単な問題はありません。私はRailsの3.1を使用し、次のクラス持っている:私は大量の割り当て(ヘルパーを構築するのActiveRecordの1)を使用してジョブを作成しようとしている私のコントローラで質量設定値以外の値を設定または保存できません

class Job < ActiveRecord::Base 
    attr_accessor :active 
    attr_accessible :roleTagline, :projectTagline, :projectStartDate, :projectDuration, :postedStartDate, 
    :postedEndDate, :skillsRequired, :skillsPro, :experiencedRequired, :description, :active 
    scope :is_active, :conditions => {:active => 1} 

    validates :roleTagline, :presence => true, 
       :length => { :minimum => 5 } 
    validates :projectTagline, :presence => true, 
       :length => { :minimum => 5 } 
    belongs_to :job_provider 

# def active=(act) 
#  @active = act 
# end 
end 

をし、その後、「アクティブに設定"属性を1に設定し、ジョブを保存します。ここでは、コントローラのコードです:私はattr_accessorを削除し、代わりに私自身のセッターを書くのすべての組み合わせを試してみた

def create 
    @job_provider = current_user.job_provider 
    @job = @job_provider.jobs.build(params[:job]) 
    @job.active= 1 # debug logging @job.active here gives an empty string 
    if @job.save # etc. 

は、私はに滞在する属性を取得するための正しい組み合わせを見つけることができないよう私は何でもモデル。これは、@ job.save属性がなくなる前でも(デバッグログを使用しているため)、私は思っていないアクティブなレコードではありません。私は周りを探索したが、私が間違っていることを理解できない。誰でも助けてくれますか?

編集:熊手からschema.rb:

create_table "jobs", :force => true do |t| 
t.string "roleTagline" 
t.string "projectTagline" 
t.date  "projectStartDate" 
t.integer "projectDuration" 
t.date  "postedStartDate" 
t.date  "postedEndDate" 
t.string "skillsRequired" 
t.string "skillsPro" 
t.string "experiencedRequired" 
t.string "description" 
t.datetime "created_at" 
t.datetime "updated_at" 
t.integer "active" 
t.integer "job_provider_id" 
end 

別の編集:さらに、私は最終的にここにこの答えを見つけたグーグル後

OK:

How can I override the attribute assignment in an active record object?

の場合クラスインスタンスではなくActiveRecord属性を変更する場合は、次の操作を行う必要があります。

自己[:フィールド名] =値

+0

"@ job.save属性がなくなった"とはどういう意味ですか?また、あなたの例を複製する必要があるということだけが残っているので、あなたのスキーマをjobsテーブルに投稿できますか? –

+0

私は、to_yaml関数と@ job.activeでオブジェクトにアクセスして両方の結果と挿入用のSQLを使用して、属性が設定されていないことを示すdebug.logを実行しようとしました。 – Dave

+0

データベーススキームを取得しようとしています。 「アクティブな」列は整数です。 – Dave

答えて

3

attr_accessor :activeをモデルから削除してください。値はattributesハッシュを介してデータベースではなくインスタンス変数に保存されます。アクセサーを記述する必要はありません。アクセラレータは自動的にactiveの列に基づいています。

nilに初期化されているため、デバッグログに空白が表示されます。 attr_accessor行を削除し、データベース内のに変更すると、ActiveRecordの移行では:null => false, :default => 0、つまりschema.rbには0に初期化されます。

+0

これは答えです、[ここ](https://gist.github.com/1908403)は、単に' attr_accessor:active'を削除しても期待通りに動作することを示す要点です。 –

0

att_accessibleにjob_provider_idを追加していないと思います。以下を試してください

attr_accessible :roleTagline, :projectTagline, :projectStartDate, :projectDuration, :postedStartDate, :postedEndDate, :skillsRequired, :skillsPro, :experiencedRequired, :description, :active, :job_provider_id 
関連する問題