2016-11-25 28 views
0

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>

Antwort

0

Ich glaube, Sie Ihre Argumente falsch in der select Methode haben:

<%= team_user_f.select(:team_user, :user_id, @team_users_collection, { include_blank: true }, class: 'form-control custom-select', style: 'width:auto;') %> 

Sehen Sie, wenn das funktioniert

+0

Dies erzeugt einen Fehler: 'falsche Anzahl von Argumenten (gegeben 5, erwartet 1..4)' –

Verwandte Themen