В моем приложении пользователи имеют много компаний, и у компаний есть много пользователей, у компаний есть много подразделений, и у пользователей есть разное подразделение в разных компаниях, например, пользователь с идентификатором 1 принадлежит Компании 1 и 2 и 2 Компании 3 . Р.Б.Как передать параметр для обновления действия?
class User < ActiveRecord::Base
has_many :companies, through: :users_companies
has_many :users_companies
has_many :divisions, through: :users_divisions
has_many :users_divisions
has_many :users_roles, dependent: :destroy
has_many :roles, through: :users_roles
end
Company.rb
class Company < ActiveRecord::Base
#before_create :create_division
has_many :users_companies
has_many :users, through: :users_companies
has_many :divisions, dependent: :destroy
has_many :positions
end
Division.rb
class Division < ActiveRecord::Base
has_ancestry
belongs_to :company
has_many :users, through: :users_divisions
has_many :users_divisions
end
UsersCompany.rb
class UsersCompany < ActiveRecord::Base
belongs_to :user
belongs_to :company
end
UsersDivision.rb
class UsersDivision < ActiveRecord::Base
belongs_to :user
belongs_to :division
belongs_to :company
end
UsersDivision таблицы имеют структуру идентификатор | user_id | division_id | company_id
при создании все хорошо
UsersDivision.create!(user: @user, division_id: params[:user][:division_ids], company_id: @company.id)
но когда я пытаюсь обновить @user в столбце UsersDivision таблицы company_id будет нил.
def update
@company = Company.find(params[:company_id])
@user = User.find(params[:id])
if @user.update(user_params)
redirect_to :back
end
end
Как передать параметры: company_id, чтобы обновить действие?
<div class="edit-registration-container">
<%= @user.full_name %>
<%= form_for([@company, @user]) do |f| %>
<%= f.label :last_name, "Фамилия" %><br />
<%= f.text_field :last_name, type: "text" %>
<%= f.label :first_name, "Имя" %><br />
<%= f.text_field :first_name, type: "text" %>
<%= f.label :middle_name, "Отчество" %><br />
<%= f.text_field :middle_name, type: "text" %>
<%= f.label :division_ids, "Подразделение" %><br />
<%= f.select :division_ids, @divisions_select %><br />
<%= f.hidden_field :company_id, value: @company.id %>
<%= f.fields_for :positions, @position do |ff| %>
<%= ff.label :name, "Должность" %>
<%= ff.text_field :name, type: "text" %>
<%= ff.hidden_field :company_id, value: @company.id %>
<% end %>
<%= hidden_field_tag "user[role_ids][]", nil %>
<% Role.all.each do |role| %>
<%= check_box_tag "user[role_ids][]", role.id, @user.role_ids.include?(role.id), id: dom_id(role) %>
<%= label_tag dom_id(role), role.name %><br>
<% end %>
<%= f.submit "Сохранить", class: "login loginmodal-submit", type: "submit" %>
<% end %>
</div>
Можете ли вы разместить свой код просмотра, пожалуйста. –
Да, конечно, уже добавлено – adyl
'form_for ([@ company, @user])' должен передать идентификатор компании. Вы устанавливаете '@ company' в действии редактирования? –