Ruby on rails RubyonRails多态-控制器和视图解决方案

Ruby on rails RubyonRails多态-控制器和视图解决方案,ruby-on-rails,ruby,nested-forms,polymorphic-associations,Ruby On Rails,Ruby,Nested Forms,Polymorphic Associations,一段时间以来,我一直在尝试为我的应用程序设计一个多态结构,但我无法得到它,我也不知道如何解决它 我有一个供应商模型,一个供应商的档案可以由一家公司或一个人提供,如下所示 供应商模型 class Supplier < ActiveRecord::Base belongs_to :profile, :polymorphic => true accepts_nested_attributes_for :personable, :allow_destroy => tru

一段时间以来,我一直在尝试为我的应用程序设计一个多态结构,但我无法得到它,我也不知道如何解决它

我有一个供应商模型,一个供应商的档案可以由一家公司或一个人提供,如下所示

供应商模型

class Supplier < ActiveRecord::Base
    belongs_to :profile, :polymorphic => true
    accepts_nested_attributes_for :personable, :allow_destroy => true, :reject_if => :all_blank
end
类供应商true
接受:personable、:allow\u destroy=>true、:reject\u if=>:all\u blank的\u嵌套属性
结束
公司模式

class Company < ActiveRecord::Base
    has_one :supplier, as: :profile
end
class公司
人物模型

class Person < ActiveRecord::Base
    has_one :supplier, as: :profile
end
class-Person
在模型级别(在控制台上),我的关联可以正常工作,但我必须预先处理两个模型之间的关联(例如,
supplier.profile=Company.new

我想要的是,当用户进入新的供应商操作时,如果供应商是个人或公司,他可以在表单上选择,然后必须做一些事情来显示正确的字段。回到创建操作,处理所有事情

我读过很多关于stackoverflow的问题,并观看了Ryan Bates的《197》和《394》

我是Rails爱好者,不是程序员

如果有人能给我指出正确的方向,我会很感激的

问候,,
David

这在很大程度上取决于所需字段的种类以及共享的数据量。但是如果它们非常不同,我实际上会在页面上有两个单独的div或部分,一个单选按钮切换显示一个&用javascript隐藏另一个。如果jquery是rails中的默认值,那么使用视图底部的jquery可以很容易地做到这一点:

 <input type="radio" name="supplier_type" value="person" />
 <input type="radio" name="supplier_type" value="company" />

 <script>
   $('input[name="supplier_type"]').on('change', function () {
      if ($(this).val() === "person") {
        $('.person-form').show();
        $('.company-form').hide();
      }
      else {
        $('.person-form').hide();
        $('.company-form').show();
      }
   });
 </script>
 supplier_params = params.slice :list, :of, :generic, :params

 if params[:supplier_type] == "company"
   supplier_params.merge! params.slice :company_name
 elsif params[:supplier_type] == "person"
   supplier_params.merge! params.slice :person_name
 end

 Supplier.new supplier_params