Во-первых, ваши условия немного небезопасны. Вы делаете простую подстановку текста в рубине, которая позволит пользователям сайта вводить любой вредоносный sql, который они хотят. Вместо этого отформатируйте его так:
people = People.paginate(
:all,
:include => [:people_postcodes, :people_specialties, :people_states],
:conditions => ["people_specialties.people_type_id = ? AND (people_postcodes.postcode_id = ? OR people_states.state_id = ?)", self.people_type_id, postcodeid.id, stateid],
:page => page,
:per_page => 16
)
Чтобы ответить на ваш вопрос, в Rails 2.x нет естественного способа использовать другое условие. Я бы сделал это:
conditions = ["people_specialties.people_type_id = ? AND (people_postcodes.postcode_id = ? OR people_states.state_id = ?)", self.people_type_id, postcodeid.id, stateid]
if params[:nationality]
conditions.first += " and nationality = ?"
conditions.push params[:nationality]
end
people = People.paginate(
:all,
:include => [:people_postcodes, :people_specialties, :people_states],
:conditions => conditions,
:page => page,
:per_page => 16
)
В приведенном выше примере я предполагаю, что в качестве параметра указывается национальность, но при необходимости корректируйте. Я создаю исходный массив условий, затем добавляю первый элемент (фактическую строку условий) и добавляю еще один элемент в конец массива: значение национальности.
Надеюсь, это поможет!