我正在嘗試使用 arel 表查詢對 has_one 關系執行“where”查詢。has_one 關系是必要的,因為它當前設定為“has_one_through”。
使用 arel 表查詢的原因是該查詢邏輯將是動態的。有幾個 has_one 關系需要單獨查詢,所以我希望盡可能干燥和可擴展。
我試圖復制的查詢看起來有點像這樣。
我要復制的查詢('style/s' 關鍵字將是動態的)
Book.includes(:style).where(styles: {id: 8})
到目前為止我嘗試過的
object = Style.find(8)
object_key = object.model_name.i18n_key
object_table = Arel::Table.new(object_key)
has_one = object_table[:id].eq(object.id)
Book.includes(object_key).where(has_one)
uj5u.com熱心網友回復:
您可以在不使用的情況下Arel通過使用pluralizeobject_key
object = Style.find(8)
object_key = object.model_name.i18n_key
Book.includes(object_key).where(object_key.to_s.pluralize => { id: object.id })
如果您仍然想使用Arel,您可以執行以下操作:
object = Style.find(8)
object_key = object.model_name.i18n_key
object_table = Arel::Table.new(object_key.to_s.pluralize)
Book.joins(object_key).where(object_table[:id].eq(object.id))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/489669.html
