Как я могу преобразовать это в MetaWhere или Arel?
Рассмотрим модель города, имеющую:
def self.search(field, search)
if search
where("#{field} LIKE ?", "%#{search}%")
else
scoped
end
end
Как я могу использовать Arel или Metawhere в этой ситуации, зная, что поле String может иметь что-то вроде:
"имя" "жители.имя" "штат.имя"
Я хочу сделать что-то подобное (не будет работать):
def self.search(field, search)
if search
where(field =~ "%#{search}%")
else
scoped
end
end
Итак, что вы думаете?
Реальный вопрос в том, как я могу преобразовать это:
"резидент.име нравится" #{значение}%'"
К этому:
: резиденты => {:name =~ "#{value}%" }
1 ответ
Решение
Вы должны быть в состоянии использовать Арела, как это.
def self.search(field, search)
if search
if field =~ /\./ # table and field
table, field = field.split('.')
arel_join = table.singularize.camelize.constantize.arel_table
joins(table.to_sym).where(arel_join[field].matches("%#{search}%"))
else
where(Resource.arel_table[field].matches("%#{search}%"))
end
else
scoped
end
end
Есть Railscast, который хорошо объясняет основы использования Arel в Rails 3.