Ruby on rails 3 从下属创建多态关系

Ruby on rails 3 从下属创建多态关系,ruby-on-rails-3,polymorphism,Ruby On Rails 3,Polymorphism,我有三个模型,它们之间存在多态关系: 类别、部门和课程。一门课程可以属于一个类别或一个部门,而不是两者都属于 在课程模型中,我将其设置如下: belongs_to :parent, :polymorphic => true accepts_nested_attributes_for :parent 对于类别和部门模型,我定义了以下关系: has_many :courses, :as => :parent 现在在课程视图中,我希望能够通过选择框为我正在编辑的课程设置适当的家长。 我

我有三个模型,它们之间存在多态关系: 类别、部门和课程。一门课程可以属于一个类别或一个部门,而不是两者都属于

在课程模型中,我将其设置如下:

belongs_to :parent, :polymorphic => true
accepts_nested_attributes_for :parent
对于类别和部门模型,我定义了以下关系:

has_many :courses, :as => :parent
现在在课程视图中,我希望能够通过选择框为我正在编辑的课程设置适当的家长。 我在_form.html.erb中有下一行:

<%= f.collection_select( :parent_id, @parent_options, :id, :name, {}, { :multiple => false } ) %>
我在railscasts和本网站上找到了很多关于处理多态关系的信息,但都假设您希望在我的示例中添加来自文章类别或行业的评论课程,而不是相反的方式

谢谢你的帮助

在HTML中,存在以下内容:

<select id="admin_course_parent_id" name="admin_course[parent_id][]"><option value="2">Verzekeraars</option>
<option value="2">Verkooptraining</option>
<option value="3">Specifieke Branches</option></select><select id="admin_course_parent_id" name="admin_course[parent_id][]"><option value="2">Verzekeraars</option>
<option value="2">Verkooptraining</option>
<option value="3">Specifieke Branches</option></select>
父项_id=>[3]声明了所选父项的正确id,但它没有将值存储到数据库中

谢谢你,我已经走了很长一段路了。没有更多的数组作为父\u id发送。我还通过onchange操作从隐藏字段设置了父\u类型。还有一个问题,如何根据集合选择框中的选定值动态填充值?我现在使用以下语句:

<%= f.collection_select( :parent_id, @parent_options, :id, :name, {}, { :onchange => "this.form.admin_course_parent_type.value = 'WHAT GOES HERE'"}) %>
想知道这里是什么部分。我必须以某种方式读出所选值的类。我们尝试过类似{:parent_id.class'}的方法,但它给出了符号,结果并不令人惊讶

目前该模型接受所有类型的输入作为父类型,真的希望有一天我不会因为这个而遇到麻烦。我想知道下次我在编辑时加载页面时,选择框是否会选择正确的值,但我们稍后会看到

父项_id=>[3]声明了所选父项的正确id,但它没有将值存储到数据库中

您有两个选择以相同的名称呈现admin\u course[parent\u id][]。这就是为什么在数组parent_id=>[3]中返回parent_id的选定值的原因。 此数组不能存储到DB中的父\u id字段中。通过以下关系,您只能存储一个父\u id:belishing\u to:parent,:polymorphic=>true


修复了选择框的重复问题,它应该有name属性,结尾不带[]才能正确传递父id值。

在浏览器中检查选择框并填充所有选项,然后在此处发布部分html,就像将请求的部分添加到原始帖子一样。
Parameters: {"utf8"=>"✓", "authenticity_token"=>"my token", "admin_course"=>{"name"=>"Afsluittechnieken", "position"=>"1", "permalink"=>"afsluiten", "visible"=>"1", "description"=>"Hier leer je afsluittechnieken", "parent_id"=>["3"]}, "commit"=>"Update Course", "id"=>"1"}
<%= f.collection_select( :parent_id, @parent_options, :id, :name, {}, { :onchange => "this.form.admin_course_parent_type.value = 'WHAT GOES HERE'"}) %>