【发布时间】:2012-11-29 05:40:50
【问题描述】:
我有两个模型:
class Wine
belongs_to :region
end
class Region
has_many :wines
end
我正在尝试将 #where 方法与通过将某些元素从 params 散列转换为查询散列而构建的散列一起使用,例如 { :region => '2452' }
def index
...
@wines = Wine.where(hash)
...
end
但我得到的只是执行查询时出现列不存在错误:
ActiveRecord::StatementInvalid: PGError: ERROR: column wines.region does not exist
LINE 1: SELECT "wines".* FROM "wines" WHERE "wines"."region" =...
当然,表wines 有region_id,所以如果我查询region_id,我不会收到错误。
问题如下:
在#where 方法中使用id 查询Wine 对象是否有特定的regions?我根据自己的能力在下面列出了一些选项。
选项 1:
我可以更改构建查询哈希的方式,以便每个字段都有_id(例如{ :region_id => '1234', :varietal_id => '1515' },但并非来自Wine 的所有关联都是belongs_to,因此在wines 中没有@ 的条目987654336@,使逻辑更复杂的连接等等。
选项 2: 构建一个 SQL where 子句,再次使用一些逻辑来确定是使用 id 还是连接另一个表……再次,逻辑会稍微复杂一些,深入研究 SQL 会让它感觉不那么 Rails-y。或者我在这方面可能是错的。
选项 3..n: 我没有想到的事情......你的意见在这里:)
【问题讨论】:
-
任一答案是否有助于您解决问题?
标签: ruby-on-rails activerecord belongs-to