我想选择一个用户,并为此示例添加相关记录,例如child。 但只有具有特定place_id的孩子。
此代码有效,但当用户没有任何子条目时,我收到了错误。
@user = User.includes(:child).find(params[:id],
:conditions => ["child.place_id = ?", @place_id])
这是错误:
Couldn't find User with id=19 [WHERE (child.place_id = 0)]
谢谢!
答案 0 :(得分:1)
尝试where
子句,因为您已经在使用暴力SQL。这不会产生错误,并且将获取或设置为nil:
@user = User.includes(:child).
where("users.id=? AND child.place_id = ?",
params[:id],@place_id).first
PS:是child.place_id
还是children.place_id
? ActiveRecord倾向于复数表名。
修改强>
这只适用于有孩子的情况。如果您希望它在没有孩子的情况下工作,请执行以下操作:
@user = User.joins('LEFT JOIN child on child.user_id = users.id').
where('child.place_id = ? AND users.id = ?', @place_id, params[:id]).
select('users.field1, child.field2 as field3')
如果您需要特定字段,请在上面的select方法中添加它们,这是作为示例提供的。