为什么我的表格不起作用?

时间:2015-10-19 21:23:43

标签: ruby-on-rails ruby simple-form

这是我的tournaments_controller文件:

class TournamentsController < ApplicationController
before_action :authenticate_user!, only: [:new, :create, :destroy]

def index
end

def show
end

def new
    render action: 'new'
end

def create
    self.tournament = Tournament.new(tournament_params)
    if tournament.save
        flash[:info] = "Tournament created successfully!"
        redirect_to root_url
    else
        render action: 'new'
    end
end

def destroy
    Tournament.find(params[:id]).destroy
    flash[:success] = "Tournament deleted!"
    redirect_to root_url
end

private

    def tournament_params
        params.require(:tournament).permit(:name, :maxplayers)
    end

end

这是我的表单文件:

        = form_for tournament do |f|
        - if tournament.errors.any?
            #error_explanation
            %h2= "#{pluralize(tournament.errors.count, "error")} prohibited this tournament from being saved:"
            %ul
                - tournament.errors.full_messages.each do |msg|
                    %li= msg

        .form-group
            = f.label :name
            = f.text_field :name, class: 'form-control'
            = f.submit 'Save', class: 'btn btn-primary'

当我的应用运行时,控制台会显示以下错误:

undefined local variable or method `tournament' for #<#<Class:0x007f0e414fa2d0>:0x007f0e418d9a90>

我使用简单形式和Haml,如果它很重要的话。 任何人都可以向我解释为什么我会收到此错误吗?

1 个答案:

答案 0 :(得分:2)

您必须使用实例变量:

  = form_for @tournament do |f|
    - if @tournament.errors.any?
        #error_explanation
        %h2= "#{pluralize(@tournament.errors.count, "error")} prohibited this tournament from being saved:"
        %ul
            - @tournament.errors.full_messages.each do |msg|
                %li= msg

    .form-group
        = f.label :name
        = f.text_field :name, class: 'form-control'
        = f.submit 'Save', class: 'btn btn-primary'
        = link_to 'Back', categories_path, class: 'btn btn-default'

"JP 3 Helene 7 Jordan 14 Iva 13 Sergey 4 Marianne 9 Kenneth 6"