2

最近在我身上发生了一件奇怪的事。

我有两个模型:

class Direction < ActiveRecord::Base
  has_many :specializations, dependent: :destroy
end

and

class Specialization < ActiveRecord::Base
  belongs_to :direction
end

他们都有一个名为title.

我用分组选择制作了一个表格(它不绑定到任何模型):

= simple_form_for :some_name do |f|
  = f.input :specialization_id, collection: Direction.all,
            as: :grouped_select,
            group_method: :specializations

在我的本地机器上一切都很好。我的选择如下所示:

Direction1 title
  Specialization1 title
  Specialization2 title
  ...
Direction2 title
  Specialization3 title
  Specialization4 title
  ...
...

当我将它部署到登台服务器时,有点意外。我的选择输出变成了这样:

#<Direction:0xb02fb60>
  #<Specialization:0xaa5fb10>
  ...
#<Direction:0x991cf90>
  #<Specialization:0xb02f868>
  ...

看起来它是:to_s作为标签方法(和值方法)而不是:title.

通过明确指定这些方法来解决问题:

= simple_form_for :some_name do |f|
  = f.input :specialization_id, collection: Direction.all,
            as: :grouped_select,
            group_method: :specializations,
            group_label_method: :title,
            label_method: :title,
            value_method: :id

但我想知道为什么会这样?我不喜欢这种惊喜。:)

一些细节:

  • 本地机器正在运行 MacOS Lion

  • 登台服务器在 Debian Squeeze 上

  • Ruby 版本相同(1.9.3p194 via rvm)

  • 导轨版本:3.2.3

  • 使用 Capistrano 进行部署

我还尝试在虚拟 Debian 机器上本地重现它以进行调试。但我没有成功。

有人可以告诉我发生了什么吗?提前致谢!

4

2 回答 2

1

我仅在生产模式下具有相同的行为。

= f.input(:city_id, label: 'Ciudad', :collection => Country.order(:name), :as =>     :grouped_select, :group_method => :cities, :group_label_method => :name, :label_method => :name, promt: "Por favor seleccione una ciudad", :include_blank => true, :input_html => { class: 'span4'} )

我希望得到城市 ID 而不是返回

"#<City:0x007f943d5a2de0>"

更新

我添加了 simple_form 属性value_method: :id并且对我来说很好。

= f.input(:city_id, label: 'Ciudad', :collection => Country.order(:name), :as =>     :grouped_select, :group_method => :cities, :group_label_method => :name, :label_method => :name, promt: "Por favor seleccione una ciudad", value_method: :id, :include_blank => true, :input_html => { class: 'span4'} )
于 2013-08-21T16:20:45.883 回答
0

尝试与 f.association 一起使用
,例如:

 = f.association :direction

您也可以调用 label_method 在选项中定义标签

于 2012-08-14T19:41:13.590 回答