所以我在这里有一个棘手的问题,我不知道如何解决。
- 我有一个提供者模型 has_many :educational_affiliations
- 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