2012-07-20 4 views
0

여기레일에 여분의 필드를 어떻게 설정합니까?

class User < ActiveRecord::Base 
    has_many :companies, :through => :positions 
    has_many :positions 

class Company < ActiveRecord::Base 
    has_many :positions 
    has_many :users, :through => :positions 

class Position < ActiveRecord::Base 
    belongs_to :company 
    belongs_to :user 
    attr_accessible :company_id, :user_id, :regular_user 
end 

그리고 내 스키마

create_table "positions", :force => true do |t| 
    t.integer "company_id" 
    t.integer "user_id" 
    t.datetime "created_at",      :null => false 
    t.datetime "updated_at",      :null => false 
    t.boolean "regular_user", :default => true 
end 

내가

Parameters: {"user"=>{"id"=>"", "first_name"=>"some", "last_name"=>"name", 
"phone_number"=>"4074615519", "email"=>"[email protected]", "active"=>"true", 
"company_ids"=>["186"], "role_ids"=>["2"], "notification_ids"=>["1", "2", "3"]}} 

내가으로 실행하고 문제가 positions.regular_user 인이 PARAMS 항상 사실이있는 모델입니다 때를 do

@user.update_attributes(params[:user]) 

또는

@user = User.new(params[:user]) 
if @user.save 

pprobably 그것 때문에 디폴트는 true ....하지만 난 3

기본 플래그

답변

0

을 변경하는 방법에 대한 아이디어를 role_ids 인 경우 false로 변경> 필요 before_save 콜백을 사용하여 role_id 특성을 설정하십시오. 예 :

class User 
    before_save :set_role_id 

    private 

    def set_role_id 
    if role_id > 3 
     self.regular_user = false 
    end 
    end 
end 
+0

그 자체는 사용자가 아닌 위치에 있기 때문에 – Trace

0

사용 before_save 필터 : 나는 내가 할 수있는 것 같아요

class Position < ActiveRecord::Base 
    belongs_to :company 
    belongs_to :user 
    attr_accessible :company_id, :user_id, :regular_user 

    before_save :update_regular_flag 

private 
    def update_regular_flag 
    self.regular_user = (role_id <= 3) 
    end 
end 
관련 문제