我正在尝试使用循环使用 squeel 重新创建以下语法:
WHERE season = "value" OR season IS NULL
我能够做到这一点:
where do
((season == entry["season"]) | (season == nil)) &
((episode == entry["episode"]) | (episode == nil)) &
((imdb == entry["imdb"]) | (imdb == nil)) &
(YEAR(theatrical) == year)
但是,问题是我想在循环中执行此操作,因此我不必为值为空时执行条件(例如,如果 imdb 没有值,我什至不会使用该行)。
我有这个:
entry = { "imdb"=>"0364725", "media"=>"DVD", "season"=>"1", ...}
entry.each do |k,v|
((k == v) | (k == nil))
end
end
但它并没有把field IS NULL
位放在 SQL 中。
如果使用 Squeel 不可能,是否可以使用 ActiveRecord 完成?
最终,我正在寻找一种方法来避免在 SQL 中为这些字段设置条件。正如我上面所说,如果该字段为空,我根本不会列出它们,但如果它有一个值,我需要做全部field = value OR field IS NULL
。
任何帮助将不胜感激。
编辑:
我目前尝试使用的整个代码是这样的:
matches_found =
includes(:dvd_director, :dvd_upc, :dvd_series).limit(1).
where do
(title == title_to_search) &
entry.each { |k,v| ((k == v) | (k == nil)) }
end
请注意,|
无论我是否使用,之后的所有内容都会被忽略__send__(k)
。
更多信息:
一件非常奇怪的事情是,如果我使用除它之外的任何东西,k,v
它就会被忽略。例如:
entry.each { |k,v| ((k == "bob") | (k == v)) }
“鲍勃”被忽略了!OR
并且值 (v) 在没有语句的情况下被放入 SQL中。