我有一个函数,我想根据下面的函数在选择表单中显示相应的值:
def index
@initval = Haus.find_all_by_haus_id(1)
end
它将返回一个值为haus_id =“1”的值列表(例如,我将得到a,b,c)
在index.rhtml中,我想显示对应于haus_id =“1”的列表,但只显示他们的timebuild(例如,我将获得“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>
如果在select表单中我将@ initval.timebuild更改为@ initival.id,它将返回一个数字(我不知道它来自哪里)。 如何在选择表单中显示具有haus_id =“1”的haus的timebuild列表?
请指导。
答案 0 :(得分:1)
如果使用find_all_by_haus_id
,结果将是所有匹配的Haus
对象的数组。即使只有一个匹配记录,它仍然是一个包含1个元素的数组。
Ruby中的每个对象都有一个id
方法,该方法返回对象的内部ID(尽管现在不推荐使用此方法名称而使用object_id
。)这是您在调用时看到的数字{您阵列上的{1}}例如
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
并使用options_from_collection_for_select之类的内容为每个条目生成find_all_by_haus_id
标记。
最后,如果options
是表格中的主键,那么您可以使用haus_id
返回匹配的对象,例如。
find