2015-04-03 35 views
0

在我的Rails 4應用程序中,我有users誰可以有很多rates如何確保一個孩子的記錄仍然存在?

class Rate < ActiveRecord::Base 

    belongs_to :user 

    validates :name, :presence => true 
    validates :amount, :presence => true 

    ... 

end 

甲率具有name,一個amount和布爾屬性default

我怎樣才能確保user不會意外刪除他的最後rate,即至少有一個速度始終保持與用戶,並且這個速度的默認屬性設置爲true如果沒有剩餘的其他率相關?

感謝您的任何想法。

回答

2

您可以使用特定的方法是這樣

class User 
    def delete_rate(rate) 
    if rates.count > 1 
     self.rates.delete(rate) 
    else 
     raise "User should have at least one rate" 
    end 
    end 
end 

做,或您可以添加一個驗證這樣的:

class User 
    validates :rates, length: { minimum: 1 } 
end 

但最後這個解決方案可以引入對用戶產生的問題。

2

也許像...

class Rate < ActiveRecord::Base 

    belongs_to :user 

    validates :name, :presence => true 
    validates :amount, :presence => true 

    after_initialize :set_default, if: ->{ user.rates.count == 1 } 
    after_destroy :ensure_rate_exists 

private 

    def set_default 
    self.default = true 
    end 

    def ensure_rate_exists 
    raise "Cannot remove.." if user.rates.count.zero? 
    end 

end 
1

你可以驗證移動用戶,以及管理價格爲嵌套屬性。像

class User < ActiveRecord::Base 
    has_many :rates, dependent: :destroy 
    accepts_nested_attributes_for :rates, allow_destroy: true 
    validates_presence_of :rates 
end 

和價格不用擔心

class Rate < ActiveRecord::Base 
    belongs_to :user 
    after_initialize :set_default, if: ->{ user.rates.count == 1 } 
    ... 

private 

    def set_default 
    self.default = true 
    end 
end 
相關問題