In einer Viele-zu-Viele-Modellbeziehung möchte ich mehrere ausgewählte Werte in der Zwischentabelle mit dem Kontrollkästchen registrieren. Ich war wirklich begeistert, als ich es implementiert habe, also werde ich es als Memorandum belassen.
Rails 5.2
Ruby 2.5.1
MacOSX
class Project < ApplicationRecord
has_many :project_phases, dependent: :destroy
has_many :mst_phases, through: :project_phases
end
class ProjectPhase < ApplicationRecord
belongs_to :project
belongs_to :mst_phase
end
class MstPhase < ApplicationRecord
has_many :project_phases
end
In Bezug auf den Prozess wird in der Mastertabelle nur das Modell "project_phase" zugeordnet, sodass nicht auf die Seite des Projektmodells verwiesen wird.
View
<%= form_with model: @project, local: true do |f| %>
<label>Projektname</label>
<%= f.text_field :project_name %>
<label>Projektprozess</label>
<%= f.collection_check_boxes :mst_phase_ids, MstPhase.all, :id, :phase %>
<% end %>
Controller
class ProjectsController < ApplicationController
def new
@project = Project.new
@project.project_phases.build
end
def create
@project = Project.new(projects_params)
if @project.save
redirect_to project_path @project
else
render action: 'new'
end
end
private
def projects_params
params.require(:project).permit( :project_name, mst_phase_ids: [])
end
end
Der Punkt ist, "StrongParameter" so einzustellen, dass Modelle, die sich auf "has_many" beziehen, als Array empfangen werden.
Die Namen der Parameter sollten wie folgt beschrieben werden.
Modellname_ids
Da für die im Array empfangenen Parameter keine spezielle Logik implementiert werden muss, werden die Datensätze in der Tabelle für die Anzahl der Elemente im Array registriert. Schienen bequem. .. .. .. ..
Recommended Posts