2011-10-25 62 views
1

我們的系統中有一個布爾型字段(使用Rails 3.0.4),當連接到MySQL時,字段會根據情況報告true和false。當連接到Oracle(生產)時,它將返回Fixnum。該列的類型爲NUMBER(1)。其他模型正確返回true和false。控制器正在做一個簡單的查找。這隻發生在演出中。索引返回true false。這發生在HTML和XML響應中。當詢問字段的類型時,控制檯報告一類FalseClass或TrueClass。該視圖報告Fixnum。Rails:爲什麼我的布爾字段返回Fixnum?

什麼可能會出錯?

更新:代碼

create_table "people", :force => true do |t| 
    t.string "name" 
    t.boolean "has_information" 
end 

class Person < ActiveRecord::Base 
    has_many :groups 
end 

與更清晰的問題

的Rails約定是使該領域的編號(1)型柱更新。然後將其轉換爲模型中的布爾值。這在我們的應用程序的幾個模型中工作。只有一個模型有這個問題。而且它只在演出中有問題。展會行動是由腳手架創建的,因此非常通用。爲什麼Rails在這個例子中不遵循約定?

更新與解決方案

它是通過調用Person.find_by_id固定在此情況下(PARAMS [:編號])!而不是Person.find的(PARAMS [:編號])爲什麼默認是在正常發現中返回一個錯誤的類是不可能的。

+0

向我們展示您的模型代碼和schema.rb文件 – Gareth

+0

我不確定這一點,但我認爲Rails默認不支持Oracle?您使用的適配器是什麼? –

+0

OracleAdapter。 Oracle絕對支持。不是很好,但它被支持。 – Sixty4Bit

回答

0

從視圖返回的複選框將是一個數字,可以是「0」或「1」,具體取決於複選框是分別取消選中還是選中。如果這是您的數據庫適配器要求的值,則需要將其在模型中轉換爲falsetrue值。

+0

這與表單沒有任何關係。這一切都適當運作。這個問題與展會行動有關。由於某種原因,Rails決定這個模型上的這個字段不是布爾值。 – Sixty4Bit

0

Oracle中沒有BOOLEAN類型。我們通常使用CHAR(1)的字段,將其約束爲值「Y」和「N」。因人而異。

分享和享受。

+0

Rails慣例是使該字段成爲NUMBER(1)類型列。然後將其轉換爲模型中的布爾值。這在我們的應用程序的幾個模型中工作。只有一個模型有這個問題。而且它只在演出中有問題。展會行動是由腳手架創建的,因此非常通用。爲什麼Rails在這個例子中不遵循約定? – Sixty4Bit

相關問題