0

我想选择一个用户并向其添加相关记录,例如此示例的子项。但只有具有特定 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)]

谢谢 !

4

1 回答 1

1

Trywhere子句,因为您已经在使用暴力 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 方法中添加它们,这是作为示例提供的。

于 2014-10-13T20:32:29.410 回答