2016-12-12 62 views
0

我想要做這樣的事情:動態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 

但軌道似乎忽視了線的存在。當我用硬編碼數組替換Product.select(:category).distinct時,它工作正常,但它不是動態的。

我想這是某種初始化問題,但有沒有解決方案?我在想我可以寫一個初始化器,但我不確定如何在類創建後應用關聯。可能只是一個紅寶石答案?

回答

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 
+0

這工作,但什麼是我的查詢做什麼?我以爲它是返回產品實例,我正在調用'p.category'來獲取類別字符串。 – Colin

+0

更多調查,看起來像字符串插值是我的大錯。不知道爲什麼我以前沒有看到錯誤...它將「_price」轉換爲符號並失敗。 – Colin

相關問題