39

我一直在努力解决我认为是一个简单的问题:

使用 simple_form 1.4 gem 在 Rails 3.0.8 中工作。

我有两个模型,owners 和 owner_types;

class Owner < ActiveRecord::Base
  belongs_to :own_type
  attr_accessible :name, :own_type_id
end

class OwnerType < ActiveRecord::Base
  has_many :owners
  attr_accessible :name, :subtype_name
end

在 Owner 视图的 _form 部分中,我想要一个显示 owner_type 关联的名称和 subtype_name 的选择框。
....类似这样的东西:所有者类型:[名称| subtype_name] 例如。[政府| 联邦]; [政府| 市政]

我的视图现在包含:app/views/owners/_form.html.erb

<%= simple_form_for @owner do |f| %>
  <%= f.error_messages %>
  <%= f.input :name %>
  <%= f.association :owner_type, :include_blank => false %>
  <%= f.button :submit %>
<% end %>

... f.association 默认仅列出 owner_type.name 字段。您如何指定不同的字段,或者在我的情况下是两个字段?

感谢所有帮助;提前致谢。

DJ

4

2 回答 2

91

为此,您必须使用 :label_method 选项。

<%= f.association :owner_type, :include_blank => false, :label_method => lambda { |owner| "#{owner.name} | #{owner.subtype_name}" } %>

或者,如果您在所有者的类上定义了一个 select_label 方法,您可以这样做

<%= f.association :owner_type, :include_blank => false, :label_method => :select_label %>
于 2011-06-13T18:33:14.017 回答
53

最简单的方法是在你的模型上实现一个 to_label 方法。像这样:

class OwnerType < ActiveRecord::Base
  def to_label
    "#{name} | #{subtype_name}"
  end
end

默认情况下,SimpleForm 将在您的模型上搜索此方法并将其用作 label_method,按以下顺序:

:to_label, :name, :title, :to_s

您还可以在您的 simple_form.rb 初始化程序上更改此选项,或者您可以将块或方法传递给:label_method您的输入选项。

于 2011-06-13T20:04:20.807 回答