Rails, как создать запись в BD, которая использует два разных FK из одной таблицы - PullRequest
0 голосов
/ 27 мая 2019

У меня есть модель User, которой для данной роли необходимо создать в таблице student_representings запись идентификаторов некоторых пользователей, которую я отправляю рядом с тем, который создается, однако я не достигаю того, что он создан правильно выкидывает следующую ошибку:

Could not find all StudentRepresentings with 'id': (12, 13) (found 0 results, but was looking for 2). Could not find StudentRepresentings with ids 12, 13.

User.rb

class User < ApplicationRecord
 #Reprsentantes y Estudiantes
 has_many :students, :class_name => 'StudentRepresenting', :foreign_key => :student_id
 has_many :representings, :class_name => 'StudentRepresenting', :foreign_key => :representing_id
end

StudentRepresenting.rb

class StudentRepresenting < ApplicationRecord
    belongs_to :student, :class_name => 'User', :foreign_key => :student_id
    belongs_to :representing, :class_name => 'User', :foreign_key => :representing_id
end

Часть представления, в которой я ввожу идентификаторы представителей, которые будут связаны с пользователем, которого я создаю

<div class="col-sm-6 mb-3 mb-sm-0" id="representantes_div">
 <!-- <input type="text" class="form-control form-control-user" id="exampleFirstName" placeholder="First Name"> -->
 <%= hidden_field_tag "user[representing_ids][]", nil %>
 <label>Representantes (Si es Estudiante, seleccione representantes) </label>
 <br>
 <%= select_tag "user[representing_ids][]", options_from_collection_for_select(Role.find_by_name('Representante').users, "id", "name"), :multiple => true, :size => 2,  include_blank: 'Seleccione el Representante', class: 'form-control' %>
</div>

user_controller.rb

def create
 @user = User.new(user_params)
  if @user.save
   flash[:success] = "El usuario ha sido creado exitosamente"
   redirect_to admin_users_path
  else
   flash.now[:danger] = @user.errors.full_messages
   render 'new'
  end
end

private
 def user_params
  params.require(:user).permit(
    :name, :lastname, :dni, :birthdate, :address, :email, :password, :password_confirmation, role_ids: [], representing_ids: []
  )
 end

А в параметрах они посылают

Parameters: {"utf8"=>"✓", "authenticity_token"=>"KenzI+IlOoPuGpE8arSTmXMPz+f4lWcWkQ65HMxZbSTePKwySdpfSzA2wcRkgdlW36RWutzfdTT8FSFlmeleow==", "user"=>{"name"=>"Joe2", "lastname"=>"Smith2", "dni"=>"12345678910101010", "email"=>"joe_s2@email.com", "birthdate"=>"2019-05-15", "address"=>"Direccion Joe", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "role_ids"=>["", "2"], "representing_ids"=>["", "12", "13"]}, "commit"=>"Aceptar"}

Я хотел бы знать, что я что-то упустил или я делаю это неправильно. Спасибо.

...