Rails传递嵌套属性但不保存关联对象

时间:2019-02-09 00:34:51

标签: ruby-on-rails ruby nested attributes fields-for

好的,所以我已经花了6个多小时了,并仔细检查了这个问题的每一个变化,但我没有做任何工作!

我正在为朋友构建一个相当简单的家谱应用程序。有两个问题模型,即人和关系。每当您构建一个新的Person(在第一个单独处理的人之后)时,它也应该构建一个Relationship,它本质上是一个具有person_1属性,person_2属性和诸如“母亲”之类的Relationship_type属性的联接表。

当我建立一个新的人时,那个人会很好地保存到数据库中,但是关联的关系就不行了。我可以看到所有必需的参数都已传入,并且我已经阅读了尽可能多的关于嵌套参数的信息,但没有骰子。

我的代码很旧,我是一个初学者,所以请忽略任何无关的代码怪异之处。

我的人模型(围绕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

结束

我的关系模型:

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

无论如何,这要比我想像的还糟,多亏了仍在读书的人,还是会喜欢朝着正确的方向前进!

0 个答案:

没有答案