ОК, так что я занимался этим 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
В любом случае, это больше беспорядка, чем я даже думал, благодаря тому, что кто-то еще читает, хотел бы толкнуть в правильном направлении!