2010-10-19 15 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)