【问题标题】:Ruby on Rails - Refactoring ActiveRecord queries from the view to the modelRuby on Rails - 将 ActiveRecord 查询从视图重构到模型
【发布时间】:2012-06-29 14:28:20
【问题描述】:

我知道“胖模型/瘦控制器”和“永远不要将逻辑放在视图中”的建议;但是,它会帮助我从一个例子中学习。在下文中,重写代码以使查询不在视图中的最佳方法是什么?

型号

 class Product < ActiveRecord::Base
   belongs_to :order
 end

 class Order < ActiveRecord::Base
   has_many :products
 end

控制器

 @orders = Order.all

查看

 <% @orders.each do |o| %>
 <%= Product.where("order_id = ?", o.id).count %>
 <% end %>

【问题讨论】:

  • 你显示的 sn-p 不需要。

标签: ruby-on-rails ruby-on-rails-3 refactoring rails-activerecord


【解决方案1】:

这完全取决于您想要显示的内容,但最直接的选择是利用您指定的关联:

<% @orders.each do |o| %>
  <%= o.products.count %>
<% end %>

然后在您的控制器中,您可以使用eager loading 来优化您的 SQL 调用。

@orders = Order.all(:include => :products)

【讨论】:

  • 尽管它是否属于控制器是有争议的——IMO 这取决于几个因素。它可能属于映射本身,它可能属于模型类方法等。
  • 这绝对取决于,同意。
  • 很有趣,感谢您的两个回答。我的印象是它会更加干燥。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多