繁体   English   中英

循环SQL结果集的更好方法

[英]Better way of looping over a SQL result set

我只是想知道是否有更好的方法来执行SQL查询而不是我存储在实例变量中的另一个SQL结果集。

我的代码看起来像这样:

def index
  id = current_user.id.to_s

  #First SQL query
  @messages = Message.where("user_id = ? OR recipient_id = ?", id, id).group('recipient_id')
end

在我看来,我有

<% @messages.each do |m| %>
<!-- Second SQL query -->
<% r = Tutor.find(m.recipient_id).user %>
  <%= "#{r.first_name + ' ' + r.last_name}" %><br />
  <%= m.subject %><br />
  <%= m.body %><br />
  <%= m.user_id %><br />
  <%= m.recipient_id %><br />
<% end %>

我正在循环@messages,然后对每个对象进行SQL查询,我想知道是否有更好(更智能)的方法吗? 谢谢!

您需要MessageTutor之间的ActiveRecord关联。 我需要看一下你的模型来确切地说明如何将它们联系起来,但你基本上是在自己做关联工作而不是将它卸载到AR / SQL。

一旦你有适当的关系,你会看到这些线上的东西。

在你的控制器中:

def index
  id = current_user.id
  @messages = Message.includes(:tutor).where("user_id = ? OR recipient_id = ?", id, id).group(:recipient_id)
end

在你看来:

<% @messages.each do |m| %>
  <%= m.tutor.user.to_s %><br />
  <%= m.subject %><br />
  <%= m.body %><br />
  <%= m.user_id %><br />
  <%= m.recipient_id %><br />
<% end %>

在您的用户模型中:

class User < ActiveRecord::Base
  def to_s
    "#{first_name} #{last_name}"
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM