Рельсы, передающие вложенные атрибуты, но не сохраняющие связанный объект - PullRequest
0 голосов
/ 09 февраля 2019

ОК, так что я занимался этим 6 с лишним часов и обыскивал все варианты по этому вопросу, но ничего, что я делаю, не работает!

Я создаю довольно простое приложение для семейного древа для друга.Рассматриваются две модели: личность и отношения.Всякий раз, когда вы создаете нового Person (после самого первого, который обрабатывается отдельно), он также должен создавать Relationship, который по сути является таблицей соединений, которая имеет атрибут person_1, атрибут person_2 и атрибут Relations_type, например «mother».

Когда я строю нового человека, этот человек просто отлично сохраняется в базе данных, но связанных с ним отношений нет.Я вижу, что все необходимые параметры передаются, и я прочитал как можно больше о вложенных параметрах, но без кубиков.

Мой код - это большой старый беспорядок, и яновичок, поэтому, пожалуйста, не обращайте внимания на любые странные коды.

Модель My Person (она сосредоточена вокруг ресурса out_relationships)

class Person < ApplicationRecord
has_many :out_relationships, :class_name => "Relationship", :foreign_key => "person_1_id"
has_many :in_relationships, :class_name => "Relationship", :foreign_key => "person_2_id"
belongs_to :user, optional: true

accepts_nested_attributes_for :out_relationships

end

Моя модель отношений:

class Relationship < ApplicationRecord
   belongs_to :person_1, :class_name => "Person"
   belongs_to :person_2, :class_name => "Person"
end

Моя форма:

<%= form_for @person, :url => create_relative_path, html:{method:'post'} do |form| %>


  <%= fields_for :out_relationships do |builder| %>
    <div class="form-group">
      <%= builder.label :relationship_type, "Relationship to #{@root_person.first_name}" %>
      <%= builder.text_field :relationship_type, class: "form-control" %>
      <%= builder.hidden_field :person_1, value: @person_1.id %>
      <%= builder.hidden_field :person_2, value: @person_1.id %>
    </div>
  <% end %>

Я установил для person_1 и person_2 одно и то же значение в качестве теста.Я думаю, это не имеет отношения к проблеме и не должно влиять на происходящее.В любом случае ...

Мой контроллер:

def new
    @root_person = Person.find(params[:id])
    @person = Person.new
    @user = current_user
    @root_person.out_relationships.build
  end

  # GET /people/1/edit
  def edit
  end

  def create
    @root_person = Person.find(params[:id])
    @person = Person.new(person_params)
    @user = current_user

    respond_to do |format|

      if @person.save

        format.html { redirect_to @person, notice: 'Person was successfully created.' }
        format.json { render :show, status: :created, location: @person }
      else
        format.html { render :new }
        format.json { render json: @person.errors, status: :unprocessable_entity }
      end
    end
  end

def person_params
      params.require(:person).permit(:first_name, :middle_name, :last_name, :birth_date, :birth_city, 
      :birth_country, :current_city, :current_country, :profession, :maiden_name, :marital_status, :patel_type,
      out_relationships_attributes: [:person_1, :person_2, :relationship_type])
    end

В любом случае, это больше беспорядка, чем я даже думал, благодаря тому, что кто-то еще читает, хотел бы толкнуть в правильном направлении!

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