0

だから私はここでトリッキーな問題を抱えています。解決方法がわかりません。

  1. has_many :educational_affiliations というプロバイダー モデルがあります。
  2. 教育機関の所属の所属先:機関 & 所属先:プロバイダ

私のデータベースには約 9000 の大学があるので、便利なrails3-jquery-autocomplete gem を使用して先行入力をサポートしています。それはすべてうまくいっています - その上で、プロバイダーの編集フォーム内の :educational_affiliations フォームのネストをサポートするために繭を使用しています。

ここで問題が発生します — これは、新しい所属レコードを送信するのに最適です (私は jquery を使用して :educational_affiliations_attributes オブジェクトに :institution_id を設定していますが、うまく機能します)

しかし、後でこれを編集するために戻ったとき、もちろん、:institution_name は入力されていません。これは、:educational_affiliations モデルの一部ではなく、:institution モデルに含まれているためです。

:educational_affiliations で試したのは次のとおりです。これが正しい解決策であると思います。

class EducationalAffiliation < ActiveRecord::Base
  attr_accessible :degree, :graduation_year, :honors, :institution_name, :institution_id, :provider_id
  belongs_to :institution
  belongs_to :provider

  # attr_accessor :institution_name

  validates :institution_id, :graduation_year, :provider_id, :degree, presence: true

  def institution_name
    Institution.find(institution_id).name
  end

end

(attr_accessor を使用して保存するために機能していましたが、今はコメントアウトしています)

したがって、上記の編集ビューをレンダリングすると、ActiveRecord::RecordNotFound: Couldn't find Institution without an IDエラーが発生します — <strong>しかし、そのステートメントでデバッガーを開くと、モデルは機関 ID を認識しているようです...なぜそれが拾わないのかとても混乱しています。

私はこれを可能な限り最悪の方法でやっていますか?私は愚かな解決策があると思います.. :)

名前を入力する必要があるパーシャルは次のとおりです。

.nested-fields
  = f.input :institution_name, url: autocomplete_institution_name_data_path, as: :autocomplete, :input_html => {:id_element => '#provider_educational_affiliations_institution_id'}
  = f.input :institution_id, as: :hidden
  = f.input :provider_id, as: :hidden, input_html: { value: current_provider.id }
  = link_to_remove_association "Remove Degree", f
4

1 に答える 1

0

仮想属性メソッドの代わりに、次の方法で属性を定義してみてください。

delegate :name, :name=, :to => :institute, :prefix => true 
于 2012-07-15T06:45:12.603 に答える