简单表单关联自定义标签名称

dj_*_*_44 33 ruby-on-rails simple-form

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

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

我有两个模型,所有者和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
Run Code Online (Sandbox Code Playgroud)

在我的所有者视图的_form部分中,我希望有一个选择框,显示owner_type关联的名称和子类型名称.
....像这样的东西:所有者类型:[名字| 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 %>
Run Code Online (Sandbox Code Playgroud)

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

所有帮助表示赞赏; 提前致谢.

DJ

Dog*_*ert 82

您必须使用:label_method选项.

<%= f.association :owner_type, :include_blank => false, :label_method => lambda { |owner| "#{owner.name} | #{owner.subtype_name}" } %>
Run Code Online (Sandbox Code Playgroud)

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

<%= f.association :owner_type, :include_blank => false, :label_method => :select_label %>
Run Code Online (Sandbox Code Playgroud)


raf*_*nca 50

最简单的方法是在模型上实现to_label方法.像这样:

class OwnerType < ActiveRecord::Base
  def to_label
    "#{name} | #{subtype_name}"
  end
end
Run Code Online (Sandbox Code Playgroud)

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

:to_label, :name, :title, :to_s
Run Code Online (Sandbox Code Playgroud)

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

  • Geez,它会杀死他们将其添加到文档中吗? (13认同)
  • @RyanSandridge 它是开源的 (2认同)
  • @kris绝对公平的点......显然我在2014年5月很懒 (2认同)