【问题标题】:Ruby On Rails - Nested Forms - unknown attributeRuby On Rails - 嵌套表单 - 未知属性
【发布时间】:2016-02-25 22:41:01
【问题描述】:

我对包含多个对象的表单有疑问 当我在我的页面“新”上创建新的团队成员时,我有这个错误:

TeamMembersGame 的未知属性“team_member_id”。

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

查看/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 %>

谢谢!

【问题讨论】:

  • 在您的member_paramsmember_games 中,我认为您想使用team_member_id 而不是team_members_id
  • 我不认为这是因为错误在“新”中并且不传递到 member_parems 或 member_games

标签: ruby-on-rails ruby forms ruby-on-rails-4


【解决方案1】:

我已经纠正了一些错误,但我不知道如何为 table team_member_games 获取 team_member 的 ID:

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

我的表 team_members_games 中没有添加任何元素

【讨论】:

    【解决方案2】:

    像这样更改允许的方法名称和参数:-

    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
    

    并在创建团队成员时使用此方法:-

    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
    

    【讨论】:

    • 没有错误,除了编辑,但它是其他的。在我的 bdd 中,我的表 team_member_games 是空的
    【解决方案3】:

    您允许在代码中使用 team_members_id 而不是 team_member_id

    将您的代码重构为:

    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

    【讨论】:

    • 除了在我的函数编辑中没有错误,但它是其他错误。当我查看我的 bdd 时,nothink 是在我的表 team_members_games 中创建的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    相关资源
    最近更新 更多