3

我只是想知道是否有更好的方法来对存储在实例变量中的另一个 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 查询,我想知道是否有更好(更智能)的方法来执行此操作?谢谢!

4

1 回答 1

2

您需要 和 之间的 ActiveRecordMessage关联Tutor。我需要查看您的模型以准确说明如何将它们关联起来,但您基本上是在自己进行关联工作,而不是将其卸载到 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
于 2013-09-01T22:47:36.217 回答