Rails - 查找没有相关记录

时间:2014-10-13 20:21:33

标签: ruby-on-rails join include find associated-object

我想选择一个用户,并为此示例添加相关记录,例如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)]

谢谢!

1 个答案:

答案 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方法中添加它们,这是作为示例提供的。