<select>表中的find_all_by表示数据库中的某个字段</select>

时间:2010-10-19 09:31:57

标签: ruby-on-rails

我有一个函数,我想根据下面的函数在选择表单中显示相应的值:

 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列表?

请指导。

1 个答案:

答案 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