我只是想知道是否有更好的方法对我存储在实例变量中的另一个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查询,我想知道是否有更好(更聪明)的方法吗? 谢谢!
答案 0 :(得分:2)
您需要Message
和Tutor
之间的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