2012-07-25 61 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 

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

    def set_regular_user 
    if self.user.is_admin? 
     self.regular_user = false 
    else 
     self.regular_user = true 
    end 
    end 
end 

每次我跑

@user.companies << Company.last 

我得到ActiveRecord::RecordNotSaved: ActiveRecord::RecordNotSaved

,但如果我刪除我之前過濾寄託都的作品完美並且如預期的那樣保存

@user.companies << Company.last 
    Company Load (0.2ms) SELECT `companies`.* FROM `companies` ORDER BY `companies`.`id` DESC LIMIT 1 
     (0.1ms) BEGIN 
    SQL (0.2ms) INSERT INTO `positions` (`company_id`, `created_at`, `regular_user`, `updated_at`, `user_id`) 
     VALUES 
     (263, '2012-07-25 14:44:15', NULL, '2012-07-25 14:44:15', 757) 

任何想法我失蹤....這個問題是基於此前question

回答

1

回調需要返回true爲了繼續,假取消操作。在你的函數中,if語句的值可能是false:self.regular_user = false ruby​​函數的返回值是最後一條語句。

只需將返回值添加到最後。

1

正如@DGM所說,回調總是在最後返回true(或者如果它們應該阻止代碼繼續執行,那麼在流程中的某個點處爲false)是一個好習慣。否則它可能會成爲一些非常奇怪的錯誤來源(從經驗來講:))。

我懷疑是if分支返回false。希望如果你只是在回調中添加true作爲最後一個語句,它應該可以工作。

相關問題