Już miesiąc próba rozwiązania problemu na pierwszy rzut oka nie jest bardzo skomplikowana: Istnieją 3 modele - zespół, użytkownik i team_user (has_namy: through) W postaci edycji i nowego zespołu, aby zrobić możliwość dynamicznego dodawania członkowie tego zespołu.Szyny 5 - jak dynamicznie dodawać zagnieżdżone pola w formularzu edycji?
Scenariusz:
- użytkownik wchodzi do zespołu nowe formy
- Wskazuje nazwę zespołu
- Po nazwa polu Select (członek zespołu)
- Kliknij przycisk Dodaj członka
- Po sprawdzeniu poprawności członka dodaje się po polu nazwy zespołu w polu tekstowym + przycisk usuwania naprzeciwko
- Z selektora usuń Jego (członek) nazwa (jak to jest już członkiem zespołu)
- W selite wybiera następny użytkownik, a następnie kliknij przycisk Dodaj członka
- Naciśnij przycisk submit aby zapisać nowy zespół i członków zespołu za
Trudności:
- próbowałem zrobić poprzez gem Cocoon, ale jest to niemożliwe, aby inny parshaly aby wybrać użytkownika należy dodać do niego (SELECT) i dodała członków (pełna nazwa - tekst)
- Po wykonaniu przez <% = from_for ... remote: true%> i oddzielny kontroler lub nowa akcja w kontrolerze teams_controller, będą to dwa formularze zagnieżdżonych (zespół team_user). Formy przywiązania, jak rozumiem, nie są gud.
- Zmiany w postaci (zmiana nazwy zespołu i dodaj/usuń członkowie zespołu mają liczyć dopiero po kliknięciu na zapisać w zasadzie złożyć drużynę formularz)
app/modele/user.rb
class User < ApplicationRecord
has_many :team_users
has_many :teams, through: :team_users
accepts_nested_attributes_for :team_users, :teams, allow_destroy: true
end
app/models/team.rb
class Team < ApplicationRecord
has_many :team_users
has_many :users, through: :team_users
accepts_nested_attributes_for :team_users, allow_destroy: true, reject_if: proc { |a| a['user_id'].blank? }
end
APP/wzory/team_user.rb
class TeamUser < ApplicationRecord
belongs_to :team
belongs_to :user
accepts_nested_attributes_for :team, :user, allow_destroy: true
end
APP/regulatory/teams_controller.rb
class TeamsController < ApplicationController
before_action :set_team, :set_team_users, only: [:show, :edit, :update, :destroy]
before_action :set_team_ancestry, only: [:new, :edit, :create, :update, :destroy]
before_action :set_new_team_user, only: [:new, :edit]
before_action :logged_in_user
layout 'sidebar'
# GET /teams
def index
@teams = Team.search(params[:search], :name).sorting(params[:sort], params[:direction]).paginate(page: params[:page])
end
# GET /teams/1
def show
end
# GET /teams/new
def new
@team = Team.new(parent_id: params[:parent_id])
end
# GET /teams/1/edit
def edit
@team_users = @team.team_users
end
# POST /teams
def create
@team = Team.new(team_params)
respond_to do |format|
if @team.save
format.html { redirect_to @team, success: t('.flash.success.message') }
else
format.html { render :new, danger: t('.flash.danger.message') }
end
end
end
# PATCH/PUT /teams/1
def update
respond_to do |format|
if @team.update(team_params)
format.html { redirect_to @team, success: t('.flash.success.message') }
else
format.html { render :edit, danger: t('.flash.danger.message') }
end
end
end
# DELETE /teams/1
def destroy
@team.destroy
respond_to do |format|
format.html { redirect_to teams_url, success: t('.flash.success.message') }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_team
@team = Team.find(params[:id])
end
def set_team_ancestry
@team_collection = Team.where.not(id: params[:id]).all.each { |c| c.ancestry = c.ancestry.to_s + (c.ancestry != nil ? "/" : '') + c.id.to_s
}.sort{ |x,y| x.ancestry <=> y.ancestry }.map{ |c| ["-" * (c.depth - 1) + c.name,c.id] }
end
def set_team_users
@team_users_collection = User.all.collect { |p| [ p.name, p.id ] }
end
def set_new_team_user
@team_users_new = @team.team_users.build
end
# Never trust parameters from the scary internet, only allow the white list through.
def team_params
params.require(:team).permit(
:name,
:parent_id,
team_users_attributes: [:_destroy, :id, :user_id]
)
end
end
Czy znalazłeś rozwiązanie? – Thrasher
@Thrasher Jeszcze nie ( –
To jest ta sama odpowiedź, której szukam Mam nadzieję, że ktoś szybko pomoże! – pappy