2012-07-20 30 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 

我有这些PARAMS

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始终是真实的,当我做

@user.update_attributes(params[:user]) 

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

pprobably,因为它默认为true ....但我需要更改为false,如果role_ids是> 3

如何更改默认的标志

回答

0

任何想法使用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 2012-07-20 19:11:52

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