2010-10-19 13 views
1

某一個領域我有一個功能,我想展示基於下面的功能在選擇的形式相應的值:find_all_by在<select>表數據庫

def index 
    @initval = Haus.find_all_by_haus_id(1) 
    end 

它將返回的值列表,我想顯示對應於haus_id =「1」的列表,但只顯示它們的timebuild(例如,如果我想要顯示一個對應於haus_id =「1」的列表,我將獲得「a」的建造時間,「b」建成,「c」建成)。

<select id="subtable" name="subtable" size="7" style="width: 150px"> 
    <option selected value="<%= @initval.id %>"><%= @initval.timebuild%></option> 
</select> 

然而,返回

undefined method `timebuild' for #<Array:0x4b5c238> 

如果選擇形式更改@ initval.timebuild到@ initival.id,它會返回一個數字(即我不知道它是從哪裏來的) 。 如何在選擇表單中顯示haus中具有haus_id =「1」的timebuild列表?

請親善指導。

回答

1

如果使用find_all_by_haus_id,結果將是所有匹配Haus對象的數組。即使只有一個匹配記錄,它仍然是一個包含1個元素的數組。

在Ruby中的每個對象都有一個id方法,返回對象的內部ID(雖然這種方法的名稱現在已不支持object_id)。這是你所看到的數字,當你的陣列上調用id例如

irb(main):002:0> [1, 2, 3].id 
(irb):2: warning: Object#id will be deprecated; use Object#object_id 
=> 23959200 

如果你只是想返回一個記錄,您可以使用Haus.find_by_haus_id

如果您確實需要多個值,請使用find_all_by_haus_id並使用類似options_from_collection_for_select的內容爲每個條目生成一個options標籤。

最後,如果haus_id是表格中的主鍵,那麼您可以使用find返回匹配的對象,例如

@initval = Haus.find(1)