Wie kann ich ausgewählte Werte in select helper mit has_many über: association und verschachtelte Form?Rails 5 - has_many durch: association und select in view
app/Modelle/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/Modelle/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/Modelle/team_user.rb
class TeamUser < ApplicationRecord
belongs_to :team
belongs_to :user
accepts_nested_attributes_for :team, :user, allow_destroy: true
end
app/Controller/teams_controller.rb
class TeamsController < ApplicationController
before_action :set_team, only: [:show, :edit, :update, :destroy]
before_action :set_team_users, only: [:new, :edit]
before_action :set_new_team_user, only: [:new, :edit]
before_action :set_team_users_collection, only: [:new, :edit]
...
# GET /teams/1/edit
def edit
end
...
private
# Use callbacks to share common setup or constraints between actions.
def set_team
@team = Team.find(params[:id])
end
def set_team_users
@team_users = @team.team_users
end
def set_new_team_user
@new_team_user = @team.team_users.build
end
def set_team_users_collection
@team_users_collection = User.all.collect { |p| [ p.name, p.id ] }
end
def team_params
params.require(:team).permit(
:name,
:parent_id,
team_users_attributes: [:_destroy, :id, :user_id]
)
end
end
app/views/Teams/_form.html.erb
<%= form_for(@team) do |f| %>
...
<% f.fields_for @team_users do |team_user_f| %>
<%= team_user_f.select(:user_id, @team_users_collection, { include_blank: true }, class: 'form-control custom-select', style: 'width:auto;') %>
<% end %>
...
<% end %>
Dies erzeugt den folgenden Fehler:
undefined method 'user_id' for #<TeamUser::ActiveRecord_Associations_CollectionProxy:0x007f90a13a3f70>
Dies erzeugt einen Fehler: 'falsche Anzahl von Argumenten (gegeben 5, erwartet 1..4)' –