【问题标题】:Rails : Database call inside a viewRails:视图内的数据库调用
【发布时间】:2015-04-17 14:48:53
【问题描述】:

我正在从头开始构建电子商务网站。 每个产品都有许多产品详细信息,每个 product_detail 是该产品的 [size,price_of_that_size,color,etc]。

在我的产品控制器上,我得到了:

def index
  @products = Product.all
  @categories = Category.all
end

事情在我的 index#view 上,我需要该产品的最低 product_details 价格,以便能够显示每个产品的起始价格。

在我的产品#show 控制器上,我这样做是为了获取该信息:

@retailprice = @product.product_details.order("retail_price ASC").first

但在我的 Product#index 上,我只有 @products.all 我已经在我的视图上进行迭代。

打电话是不好的做法

product.product_details.order("retail_price ASC").first 

在我看来每次迭代?

我经常需要命令显示信息(asc / desc),但是当在控制器中执行它不是很自然时,我不知道将它放在哪里。

任何建议将不胜感激。

【问题讨论】:

  • 尝试在您的模型 deflowest_price_details product_details.order("retail_price ASC").first end 和模板中创建方法,您可以像 product.lowest_price_details 一样使用。

标签: ruby-on-rails database activerecord view


【解决方案1】:

您可以使用 has_many 本身的选项指定裸集合的排序顺序:

class Product < ActiveRecord::Base 
  has_many : product_details, :order => 'retail_price ASC'
end 

您也可以有两个关系,并将它们用作您的要求:

class Product < ActiveRecord::Base 
  has_many :product_details
  has_many :product_details_desc, :order => 'retail_price DESC'
  has_many :product_details_asc,  :order => 'retail_price ASC'
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多