2015-10-19 119 views
1

这里是我的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。 任何人都可以向我解释为什么我得到这个错误?

回答

2

你必须使用一个实例变量:

def new 
    @tournament = Tournament.new 
    render action: 'new' 
end 

def create 
    @tournament = Tournament.new(tournament_params) 
    if @tournament.save 
     flash[:info] = "Tournament created successfully!" 
     redirect_to root_url 
    else 
     render action: 'new' 
    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' 
     = link_to 'Back', categories_path, class: 'btn btn-default' 
+0

感谢。现在工作正常。 – Nekron