Как я могу преобразовать это в MetaWhere или Arel? - PullRequest
0 голосов
/ 23 апреля 2011

Рассмотрим модель города, имеющую:

  def self.search(field, search)
    if search
      where("#{field} LIKE ?", "%#{search}%")
    else
      scoped
    end
  end

Как я могу использовать Арель или мета-локацию в этой ситуации, зная, что поле является строкой и может иметь что-то вроде:

"имя" "жителей.name "" state.name "

Я хочу сделать что-нибудь подобное (не будет работать):

  def self.search(field, search)
    if search
       where(field =~ "%#{search}%")
    else
      scoped
    end
  end

Итак, что вы думаете?

реальный вопрос заключается в том, как я могу преобразовать это:

"Resident.Name LIKE '# {value}%'"

К этому:

: Resident => {:name = ~ "# {value}%"}

1 Ответ

0 голосов
/ 23 апреля 2011

Вы должны иметь возможность использовать 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 , который хорошо объясняет основы использования Arel в Rails 3.

...