[英]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查询,我想知道是否有更好(更智能)的方法吗? 谢谢!
您需要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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.