动态ActiveRecord关联(基于另一个模型)

时间:2016-12-12 22:16:13

标签: ruby-on-rails ruby activerecord

我想做这样的事情:

  class Store < ApplicationRecord
    Product.select(:category).distinct do |p|
      has_one "lowest_"+p.category+"_price".to_sym, -> { where(category: p.category).order(price: :asc) }, class_name: "Product"
    end
  end

但是rails似乎忽略了那些线条。当我用硬编码数组替换Product.select(:category).distinct时,它工作正常,但它不是动态的。

我想这是某种初始化问题,但有解决方案吗?我以为我可以编写一个初始化程序,但是我不确定如何在创建类之后应用关联。可能只有一个直接的红宝石答案?

1 个答案:

答案 0 :(得分:0)

你的代码出了问题,它没有达到预期的效果。

"lowest_"+p.category+"_price".to_sym

仅将"_price"转换为符号。

我也会使用pluck代替,因为您在这里不需要Product模型。

尝试这样做:

class Store < ApplicationRecord
  Product.pluck(:category).uniq do |category|
    has_one "lowest_#{category}_price".to_sym, -> { where(category: category).order(price: :asc) }, class_name: Product
  end
end