Как мне создать запись с обеих сторон has_many: через ассоциацию? - PullRequest
0 голосов
/ 21 января 2019

Как я могу добавить запись с обеих сторон has_many: через ассоциацию?

Мне удалось успешно добавить и удалить человека из спортзала с помощью формы на странице спортзала.

Но я не знаю, как добавить и удалить Тренажерный зал от Персона, через форму на странице Персона.

Мои модели:

class Person < ApplicationRecord
    has_one :membership
    has_one :gym, through: :membership
end

class Membership < ApplicationRecord
  belongs_to :person
  belongs_to :gym
end

class Gym < ApplicationRecord
    has_many :memberships
    has_many :people, through: :memberships
end

Мои маршруты.rb:

Rails.application.routes.draw do

  resources :people

  resources :gyms do
    resources :memberships
  end

end

My memberships_controller.rb:

class MembershipsController < ApplicationController

    def new
      @gym = Gym.find(params[:gym_id])
      @membership = @gym.memberships.new
    end

    def create
      @gym = Gym.find(params[:gym_id])
      @membership = @gym.memberships.new(membership_params)

      if @membership.save
        redirect_to gym_path(@gym)
      else
        render :new
      end
    end

    def destroy
      @gym = Gym.find(params[:gym_id])
      membership = @gym.memberships.find_by(person_id: (params[:id]))
      membership.destroy

      redirect_to @gym
    end

private

    def membership_params
        params.require(:membership).permit(:person_id)
    end

end

На странице Gym у меня есть ссылка, которая открывает эту форму, чтобы выбрать и добавить человека вТренажерный зал (на самом деле создает новую запись person_id и gym_id в таблице Join membership).

My memberships/_form.html.erb:

<%= form_with(model: [@gym, membership], local: true) do |form| %>

  <div class = "form-group">
    <%= form.label :Person, class: "form-text" %>
    <%= form.collection_select(:person_id, Person.all, :id, :firstname, {include_blank: true}, class: "form-control") %>
  </div>

  <div class="actions">
    <%= form.submit 'Submit Membership', class: "btn btn-primary" %>
  </div>

<% end %>

В моем файле маршрутов, еслиЯ вкладываю ресурс членства под ресурсом people и следую той же процедуре, в конце концов я выполню действие memberships#new, которое уже используется ресурсом gyms.

Я застрял и не могу понятьспособ обойти это.

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