Rails:减少代码

时间:2011-11-30 21:23:08

标签: ruby-on-rails ruby

我知道我的视图中可能有太多逻辑,所以我想知道如何将它包含在我的控制器中:

控制器:

def purchasers
   @deal = Deal.find(params[:id])
   @pl = @deal.purchases
end

查看:

<% title "List Of Purchases" %>
Total Purchases: <%= @pl.count %><BR><BR>
<%
@pl.each do |p|
    u = User.find(p.user_id)
    %>
    <%= u.email %><BR>
 <%
end
%>

4 个答案:

答案 0 :(得分:4)

我建议您删除查看代码中对User.find的调用。

看起来您正在从购买中存储的user_id中查找用户。为什么不在模型中使用:

class Purchase < ActiveRecord::Base
   belongs_to :user
   ...
end

然后在视图代码中:

<% @pl.each do |purchase| %>
  <%= purchase.user.email %><BR>
<% end %>

希望这有帮助。

答案 1 :(得分:0)

看起来您可能没有在“购买”和“用户”模型中正确设置关联。假设每个u = User.find(p.user_id) p.user.email

,而不是Purchase,您应该能够写belongs_to :user

答案 2 :(得分:0)

如果您的购买模型属于用户模型,则无需使用User.find查找User。 如果没有,则将您的购买模型归属于用户模型

<% @pl.each do |p| %>
  <%= p.user.email %>
<% end %>

答案 3 :(得分:0)

值得注意的是,以下可以改进以利用Rails的技巧来缓存集合:

<%= @pl.count %>

<%= @pl.size %>

size方法将返回购买次数,但不会再次将对象加载到内存中,因为它们已在控制器中查找过。