Используя Ruby on Rails в сочетании с capistrano и git, я столкнулся с досадной проблемой ..
У меня есть контроллер "people" с действием index, который выглядит примерно так:
def index
@people = Person.find( :conditions => params[:search] )
end
В таблице Person есть логический столбец "is_admin". Если предположить, что некоторые люди являются администраторами, а некоторые нет, то вызов get http://localhost:3000/people?search[is_admin]=true должен заполнить @ people некоторыми пользователями ... И это верно для моего локального компьютера когда я запускаю приложение в режиме development ..
Но .... При развертывании на мою учетную запись сервера (railsplayground) при вызове http://mydomain.com/people?search[is_admin]=true не удается найти какие-либо подходящие элементы.
Однако, если я изменю ...? Search [is_admin] = true на ...? Search [is_admin] = 1 ответ вернет пользователей-администраторов, как и ожидалось ...
Вернувшись на мой локальный компьютер, использование «1» вместо «true» не выполняется.
Суть в том, что
Person.find( :all, :conditions => { :is_admin => 'true' } )
работает в моей среде разработки, а
Person.find( :all, :conditions => { :is_admin => 1 } )
работает в моей развернутой среде.
Почему это? и как я могу это исправить?
В идеале я хотел бы разместить ссылки вроде:
link_to( "Administrators", {
:controller => '/people',
:action => :index,
:search => { :is_admin => true }
})
и получите списки администраторов:).
Стоит отметить, что моя база данных для разработки - это файл sqlite3, а продукция - это база данных mysql ...
РЕДАКТИРОВАТЬ: Я понимаю возражения против ввода пользователя, но в этом исключительном случае это очень очень незначительная угроза. Кроме того, мой текущий код отлично работает либо на моем компьютере разработчика, либо на моей учетной записи, но не на обоих. Кажется, что самое простое решение меняет способ, которым sqlite3 сохраняет и интерпретирует логические значения, поэтому я бы изменил свой вопрос на «Как изменить способ, которым sqlite сохраняет логические значения» ... Если sqlite идеально имитирует поведение mysql, это послужит моим разработкам нужно отлично ...