我得到了一個postgreSQL錯誤,在我沒有在本地計算機上使用postgreSQL的本地。Rails 3在Heroku上的postgreSQL查詢問題 - 布爾與複選框參數='on'
我有一個帶複選框和帶有布爾型字段的模型的搜索表單。當我選中該框以查找已完成的所有報告時,表單將傳遞參數值completed ='on'。正如heroku日誌所示,數據庫不喜歡在sql中使用帶有布爾值的參數值。不管怎樣,我會認爲rails會以某種方式將其從「on」更改爲true,而不管該搜索表單在本地是否正常工作。
我怎樣才能使這個在Heroku上工作?
一旦網站在Heroku上運行,如果有類似這樣的問題在本地工作,但不在服務器上,我如何測試未來的更改? Heroku會給你一個區域來測試你的應用程序的不同版本嗎?
詳情:
地方發展登錄
[1m[35mReport Load (0.8ms)[0m SELECT "reports".* FROM "reports" WHERE ("reports"."user_id" = 1) AND (completed = 'on') LIMIT 4 OFFSET 0
Heroku的日誌
ActiveRecord::StatementInvalid (PGError: ERROR: invalid input syntax for type boolean: "on"
2011-06-08T00:17:21+00:00 app[web.1]: : SELECT "reports".* FROM "reports" WHERE ("reports"."user_id" = 2) AND (completed = 'on') LIMIT 4 OFFSET 0):
2011-06-08T00:17:21+00:00 app[web.1]: app/controllers/reports_controller.rb:6:in `index'
控制器
def index
@reports = Report.accessible_by(current_ability).search(params)
@reports = @reports.paginate :per_page => 4, :page => params[:page]
respond_to do |format|
format.html
format.xml { render :xml => @reports }
end
end
查看
<%= form_tag(reports_path, :method => "get") do %>
<ul>
<li>
<%= link_to 'Show All', reports_path %>
</li>
<li>
<%= label_tag(:report_number, "Report Number") %>
<%= text_field_tag(:report_number,nil, :value => params[:report_number]) %>
</li>
<li>
<%= label_tag(:job_number, "Job Number") %>
<%= text_field_tag(:job_number,nil, :value => params[:job_number]) %>
</li>
<li>
<%= label_tag(:has_failures, "Failures") %>
<%= check_box_tag(:has_failures,nil, params[:has_failures]) %>
</li>
<li>
<%= label_tag(:completed, "Completed") %>
<%= check_box_tag(:completed, nil, params[:completed]) %>
</li>
<li>
<%= submit_tag("Search") %>
</li>
</ul>
<%結束%>
型號
def self.search(criteria)
if !criteria[:report_number].blank?
where("report_number = ?",criteria[:report_number])
elsif !criteria[:job_number].blank?
joins(:site).
where("sites.job_number = ?",criteria[:job_number])
else
composed_scope = scoped
if !criteria[:has_failures].blank?
composed_scope = composed_scope.where("has_failures = ?",criteria[:has_failures])
end
if !criteria[:completed].blank?
composed_scope = composed_scope.where("completed = ?",criteria[:completed])
end
composed_scope
end
end
啊,很高興知道。 – 2011-06-08 02:29:25
感謝您的回答。我在我的電腦上運行postgreSQL v9.0.3。如果我要開發混合不同的rails應用程序,在任何一個heroku共享數據庫或專用數據庫上運行,你對於如何設置我的系統有任何建議嗎?ie。我可以在同一臺計算機上運行postgreSQL v8.3和v9,還是有更好的方法來開發和部署相同的數據庫?我有一個mac/os x雪豹。 – Daniel 2011-06-08 03:33:27
我想你必須安裝Postgres的兩個版本才能使環境儘可能相似。我沒有試圖自己做,但我認爲它應該是可能的。我只是儘量避免數據庫特定的查詢,並儘可能使用ActiveRecord來構建查詢。 – 2011-06-08 04:14:45