Conditions on belongs_to



我有一个名为Request的模型,belongs_toUser

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 }

这将为您使用的任何数据库获得适当的真实值。

相关内容

  • 没有找到相关文章

最新更新