将 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 ......这对我的本地人来说是正确的当我在开发模式下运行应用程序时..
但是....当我部署到我的服务器帐户 ( 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 的行为,它将为我的发展服务需要完美...