Ruby on Rails を capistrano と git と組み合わせて使用すると、厄介な問題に遭遇しました..
次のようなインデックスアクションを持つコントローラー「人」があります。
def index
@people = Person.find( :conditions => params[:search] )
end
Person テーブルにはブール値の「is_admin」列があります。一部の人々が管理者であり、一部が管理者ではない場合、http://localhost:3000/people?search[is_admin]=trueへの get 呼び出しは、@people に一部のユーザーを入力する必要があります...そして、これは私のローカルに当てはまりますアプリを開発モードで実行すると、PC..
しかし.... サーバー アカウント ( railsplayground ) にデプロイすると、http://mydomain.com/people?search[is_admin]=true を呼び出しても一致するアイテムが見つかりません。ただし、...?search[is_admin]=trueを...?search[is_admin]=1に変更すると、応答は期待どおりに管理者ユーザーを返します...
ローカル PC に戻ると、「true」の代わりに「1」を使用すると失敗します。
肝心なのは、
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データベースであることに注意してください...
編集: ユーザー入力に対する異論は理解していますが、この例外的なケースでは、それは非常に小さな脅威です。また、現在のコードは、開発用 PC または運用アカウントのいずれかで完全に機能しますが、両方では機能しません。最も簡単な解決策は、sqlite3 がブール値を保存および相互運用する方法を変更するように思われるため、質問を「sqlite がブール値を保存する方法を変更するにはどうすればよいですか」に変更します... sqlite が mysql の動作を完全に模倣する場合、それは私の開発に役立ちます完全に必要です...