0

所以我在这里有一个棘手的问题,我不知道如何解决。

  1. 我有一个提供者模型 has_many :educational_affiliations
  2. EducationalAffiliation belongs_to :institution & belongs_to :provider

我的数据库中有大约 9000 所大学,因此我使用了方便的rails3-jquery-autocomplete gem 来为我提供预输入支持。这一切都很好 - 最重要的是,我正在使用 cocoon 来支持 :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 error — <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 回答