2015-04-03 62 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 
相关问题