我有一个名为Request
的模型,belongs_to
是User
。
class Request < ActiveRecord::Base
belongs_to :user, :conditions => "can_make_requests = t"
end
User
模型的模式中有一个名为can_make_requests
的布尔字段,但由于某种原因,当我尝试时
aUser.requests.create
当aUser
具有can_make_requests
作为f
时,它仍然工作(aUser.requests.first
返回新做出的请求)。有人知道问题出在哪里吗?
您使用的是User#requests
关联,它对您在Request#user
上的条件一无所知。
CCD_ 12基于CCD_ 14关联上给定的任何条件构建并保存CCD_。
当然,Request
恰好有一个user
关联,但在您的示例中从未使用过。
是的,它会导致奇怪的行为和不一致:
>> user = User.create(:can_make_requests => false)
=> #<User id: 3, can_make_requests: false>
>> request = user.requests.create
=> #<Request id: 2, user_id: 3>
>> request.user
=> nil
>> user.requests
=> [#<Request id: 2, user_id: 3]
如果您想使用验证从请求级别强制执行它,您可以执行以下操作:
class Request < ActiveRecord::Base
validates :user, :presence => true
validate :user_can_make_requests
def user_can_make_requests
errors[:user] << 'cannot make requests' if user && !user.can_make_requests?
end
end
对于PostgreSQL(以及Rails下的SQLite),您希望't'
为true,而不仅仅是t
。当然,对于MySQL,您需要1
。尝试将您的:conditions
更改为:
belongs_to :user, :conditions => [ 'can_make_requests = ?', true ]
或者:
belongs_to :user, :conditions => { :can_make_requests => true }
这将为您使用的任何数据库获得适当的真实值。