考虑一个城市模型:
def self.search(field, search)
if search
where("#{field} LIKE ?", "%#{search}%")
else
scoped
end
end
在这种情况下我如何使用Arel或Metawhere知道该字段是一个字符串可以有类似的东西:
“名称” “residents.name” “state.name”
我想做那样的事情(不会起作用):
def self.search(field, search)
if search
where(field =~ "%#{search}%")
else
scoped
end
end
那么,你有什么想法?
真正的问题是,我该如何转换它:
“resident.name LIKE'#{value}%'”
对此:
:居民=> {:name =〜“#{value}%”}
答案 0 :(得分:0)
你应该可以像这样使用Arel。
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可以很好地解释在Rails 3中使用Arel的基础知识。