我有两个模型industry_matcher
和staffroom
Model IndustryMatcher
class IndustryMatcher < ActiveRecord::Base
has_many :industries, class_name: 'Staffroom', conditions: ["staffroom_type = 'Industry'"]
Model Staffroom
class Staffroom < ActiveRecord::Base
has_many :industry_matchers
现在我已经创建了一个ActiveAdmin资源,它基本上是一个表单,其中包含用户可以从select2
字段中选择的名称和行业。
ActiveAdmin.register IndustryMatcher do
config.sort_order = 'name_asc'
menu :parent => 'Job Networks', :label => 'Industry Matcher'
form do |f|
f.semantic_errors *f.object.errors.keys
f.inputs 'Industry' do
f.input :name
f.input :industries, :include_blank => false, :as => :select, :multiple => true, :input_html => {class: "chzn-select"}, collection: Staffroom.industry
end
f.actions
end
end
我可以保存模型IndustryMatcher的数据,但这种关系根本没有保存。
这是链接两个
的模型类class IndustryMatcherStaffroom < ActiveRecord::Base
attr_accessible :industry_id, :staffroom_id
belongs_to :industry_matcher
belongs_to :staffroom
end
如果有人能告诉我这里缺少什么,以及为什么这种关系不会得到保存,我将非常感激。
当我尝试编辑时保存记录后,我看到以下错误
ActiveRecord :: StatementInvalid at / admin / industry_matchers / 11 / edit PG :: UndefinedColumn:错误:列staffrooms.industry_matcher_id 不存在第1行:......确保“在哪里”员工室“。”删除“= 'f'和'员工室...... ^:选择“staffrooms”。来自“staffrooms”所在的“staffrooms”。“已删除” ='f'和“staffrooms”。“industry_matcher_id”= 11 AND(staffroom_type ='Industry')
答案 0 :(得分:0)
您的关联不完整,您必须使用has_many through:
告诉您的模型使用联接表,如下所示:
class IndustryMatcher < ActiveRecord::Base
has_many :industry_matcher_staffrooms
has_many :industries, through: :industry_matcher_staffrooms, class_name: 'Staffroom', conditions: ["staffroom_type = 'Industry'"]
class Staffroom < ActiveRecord::Base
has_many :industry_matcher_staffrooms
has_many :industry_matchers, through: :industry_matcher_staffrooms
由于您未指定模型使用连接表(即IndustryMatcherStaffroom
模型),因此rails将您的关联视为一对多连接,并查找相关内容industry_matcher_id
表中的id(即staffrooms
),因此错误:
PG::UndefinedColumn: ERROR: column staffrooms.industry_matcher_id does not exist
您可以在Rails guides中了解有关关联的更多信息。