Вложенные объекты в виде рельсов - PullRequest
0 голосов
/ 28 мая 2020

У меня есть следующая структура объекта для хранения некоторых данных. ApplicationFrom имеет три атрибута, которые являются объектами. Я расширяю ActiveModel, чтобы позже добавить проверки. подробности можно найти здесь - rails_casts

module PipedriveApplicationForm
    class ApplicationForm
        include ActiveModel::Validations
        include ActiveModel::Conversion
        extend ActiveModel::Naming

        attr_accessor :org_details, :contact_details, :deal_details

        def initialize(attributes = {})
        attributes.each do |name, value|
            begin
                send("#{name}=", value)
            rescue => exception
            end
        end
      end
    end


    class OrgDetail
        include ActiveModel::Validations
        include ActiveModel::Conversion
        extend ActiveModel::Naming

        attr_accessor :businessDescription,
        :businessWebsite,

        def initialize(attributes = {})
        attributes.each do |name, value|
            begin
                send("#{name}=", value)   
            rescue => exception
            end
        end
      end
    end

    class ContactDetail
        include ActiveModel::Validations
        include ActiveModel::Conversion
        extend ActiveModel::Naming

        attr_accessor :ownerDOB

        def initialize(attributes = {})
        attributes.each do |name, value|
            begin
                send("#{name}=", value)   
            rescue => exception   
            end
        end
      end
    end

    class DealDetail
        include ActiveModel::Validations
        include ActiveModel::Conversion
        extend ActiveModel::Naming

        attr_accessor :purpose

        def initialize(attributes = {})
        attributes.each do |name, value|
            begin
                send("#{name}=", value)
            rescue => exception
            end
        end
      end
    end
end

В моем контроллере я строю следующий объект

def edit_application
      @application_details = PipedriveApplicationForm::DealDetail.new(application_detail)
      @person_details = PipedriveApplicationForm::ContactDetail.new(get_person_by_id(application_detail['data']['person_id']['value'])[:data])
      @org_details = PipedriveApplicationForm::OrgDetail.new(get_org_by_id(application_detail['data']['org_id']['value'])[:data])
      @pipedrive_application = PipedriveApplicationForm::ApplicationForm.new({org_details: @org_details, contact_details: @person_details, deal_details: @application_details})
end

Теперь в своей форме я делаю это Я использование fields_for для доступа к вложенному объекту и попытки его обновления.

    = form_for(@pipedrive_application, url: edit_application_path(current_user, @application), html: {method: :put})  do |f|
        = f.object.inspect
        = f.fields_for :deal_details do |ff|
            = ff.object.inspect
            %h4
                Application Details
            =ff.label :purpose
            =ff.text_field :purpose

Значения полей не заполняются предварительно. В чем проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...