从对象rails中跳过一些数据

时间:2016-02-11 06:46:48

标签: ruby-on-rails activerecord

目前,我正在通过此行<{1}}获取所有记录

database

的某些地方
@share_requests = CameraShareRequest.all.includes(:user, :camera).decorate

没有<tr> <td><%= camera_share_request.email %></td> <td><%= link_to camera_share_request.camera.name, camera_path(camera_share_request.camera) %></td> <td><%= link_to camera_share_request.user.fullname, user_path(camera_share_request.user) %></td> <td><%= camera_share_request.message %></td> <td><%= camera_share_request.share_rights %></td> <td><%= camera_share_request.user_status %></td> <td><%= camera_share_request.share_created_at %></td> </tr> 的几个条目我想从我的camera_share_request.camera or user对象中跳过这些条目,我怎么可能尝试用@share_requests但是失败了...

2 个答案:

答案 0 :(得分:0)

您可以使用.not取消.where并忽略没有相机或用户的记录:

CameraShareRequest.where.not(user_id: nil, camera_id: nil).includes(:user, :camera).decorate

这将导致SQL看起来像:

SELECT "camera_share_requests".* FROM "camera_share_requests"  WHERE ("camera_share_requests"."user_id" IS NOT NULL) AND ("camera_share_requests"."camera_id" IS NOT NULL)

如果user_idcamera_id可能存在,但UserCamera已被删除,则可以在打印表格时跳过这些记录:

@share_requests.each do |share_request|
  next unless share_request.user && share_request.camera
  # Print row
end

答案 1 :(得分:0)

一种方法是:

@share_requests = CameraShareRequest.joins( :user, :camera ).decorate