2

最近私に奇妙なことが起こりました。

私は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のバージョンは同じ(rvm経由で1.9.3p194)

  • レールのバージョン: 3.2.3

  • カピストラーノでデプロイする

また、デバッグ目的で、仮想 Debian マシンでローカルに再現しようとしました。しかし、私は成功しませんでした。

誰かが私に何が起こっているのか教えてもらえますか? 前もって感謝します!

4

2 に答える 2

0


たとえば、 f.association で使用してみてください 。

 = f.association :direction

オプションでラベルを定義するために label_method を呼び出すこともできます

于 2012-08-14T19:41:13.590 に答える