Cle61
Cle61

Reputation: 11

Ruby On Rails - Nested Forms - unknown attribute

i have a problem with my form who contains multiple object When i go on my page "new" for create new team_member, i have this error :

unknown attribute 'team_member_id' for TeamMembersGame.

models/team_member.rb

class TeamMember < ActiveRecord::Base

    mount_uploader :avatar, AvatarUploader

    has_many :team_members_games
    accepts_nested_attributes_for :team_members_games
    has_many :team_members_weapons
    has_many :team_members_champions
end

models/team_member_game.rb

class TeamMembersGame < ActiveRecord::Base
    belongs_to :team_member
end

controllers/admin/team_members_controller.rb

class Admin::TeamMembersController < Admin::DashboardController
    def new
        @member = TeamMember.new
        @member.team_members_games.build
    end

    def create
        @member = TeamMember.new(member_params)

        if @member.save
            redirect_to edit_admin_team_member_path(@member.id), notice: 'Le membre a bien été creer'
        else
            render 'new'
        end
    end

    def edit
        @member = TeamMember.find(params[:id])

        @member_game = @member.team_members_games
        #@member = TeamMember.joins(:TeamMembersChampion, :TeamMembersWeapon, :TeamMembersGame)
    end

    def update
        @member = TeamMember.find(params[:id])

        if @member.update_attributes(member_params)
          # Handle a successful update.
          redirect_to edit_admin_team_member_path(@member.id), notice: 'Le membre a bien été modifier'
        else
          render 'edit'
        end
    end

    def destroy
        TeamMember.destroy(params[:id])
        redirect_to admin_team_members_path, notice: 'Le membre a bien ete supprimer'
    end

    private

    def member_params
        params.require(:team_member).permit(:name, :id_steam, :color, :avatar, :avatar_color, :description, :rank_cs, :rank_lol, :role_cs, :role_lol, team_members_games: [ :team_members_id, :name_game])
    end

    def member_games
        params.require(:team_members_games).permit(:team_members_id, :name_game)
    end
end

view/admin/new.html.erb

<%= form_for(@member, url: admin_team_members_path, html: { method: :post }, id: 'new_news') do |f| %>
    <%= @member.inspect %>
    <%= @member_games.inspect %>
    <div class="row">
        <div class="col s12">
            <% @member.errors.full_messages.each do |msg| %>
                <%= msg %>
            <% end %>
        </div>
    </div>

    <div class="row">
        <div class="col s12 m6">
            <div class="field input-field">
                <%= f.label :name, "Nom" %>
                <%= f.text_field :name, autofocus: true, :class => "" %>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col s12">
            <p class="bold">
                Jeux :
            </p>
        </div>
        <div class="col s12 m6">

            <%= f.fields_for :team_members_games do |team_members_games_form| %>
            <div class="field input-field">
                <%= team_members_games_form.check_box :name_game, {:class => "filled-in", :id => "team_members_game_name_game"}, true, false %>
                <%= team_members_games_form.label :name_game, "game" %>
            </div>
            <% end %>
        </div>
    </div>
    <div class="row">
        <div class="col s12">
            <div class="btnlog actions">
                <%= button_tag(type: 'submit', class: "btn") do %>
                    Publier <i class='material-icons right'>send</i>
                <% end %>
            </div>
        </div>
    </div>
<% end %>

thanks !

Upvotes: 1

Views: 517

Answers (3)

Cle61
Cle61

Reputation: 11

I have corrige some errors, but i haven't idea for get the id of team_member for the table team_member_games :

def team_member_params
        params.require(:team_member).permit(:name, :id_steam, :color, :avatar, :avatar_color, :description, :rank_cs, :rank_lol, :role_cs, :role_lol, team_members_game_attributes: [ :id, :name_game])
end

no one element are add in my table team_members_games

Upvotes: 0

user3506853
user3506853

Reputation: 814

Change permitted method name and parameters like this:-

def team_member_params
    params.require(:team_member).permit(:name, :id_steam, :color, :avatar, :avatar_color, :description, :rank_cs, :rank_lol, :role_cs, :role_lol, team_members_games: [ :id, :name_game])
end

And use this method while creating team member:-

def create
    @member = TeamMember.new(team_member_params)
    if @member.save
        redirect_to edit_admin_team_member_path(@member.id), notice: 'Le membre a bien été creer'
    else
        render 'new'
    end
end

Upvotes: 0

Meri Alvarado
Meri Alvarado

Reputation: 191

you are permitting team_members_id in your code instead of team_member_id

refactor your code to this:

def member_params params.require(:team_member).permit(:name, :id_steam, :color, :avatar, :avatar_color, :description, :rank_cs, :rank_lol, :role_cs, :role_lol, team_members_games_attributes: [ :id, :team_member_id, :name_game]) end

Upvotes: 0

Related Questions