将@package用作变量名时的NoMethodError

时间:2014-04-03 02:25:44

标签: ruby-on-rails ruby

我有一个名为Package的模型,此代码位于Admin :: PackagesController。

def new
  @package = Package.new
end

这会抛出NoMethodError,并带有消息" undefined method` []'对于nil:NilClass",突出显示定义@package的行。

当我为变量使用其他名称时,或者在Rails控制台中运行相同的行时,不会发生同样的错误。

这是在Rails 4上。控制器的整个代码如下。

class Admin::PackagesController < ApplicationController
  def index
    @packages = Package.all
  end

  def new
    @package = Package.new
  end

  def create
    @package = Package.new(package_params)
    if @package.save
      flash[:success] = "Package created."
      redirect_to admin_packages_path
    else
      flash.now[:warning] = "Something went wrong."
      render "new"
    end
  end

  def edit
    @package = Package.find(params[:id])
  end

  def update
    @package = Package.find(params[:id])
    if @package.update_attributes(package_params)
      flash[:success] = "Package updated."
      redirect_to admin_packages_path
    else
      flash.now[:warning] = "Something went wrong."
      render "new"
    end
  end

  def destroy
    @package = Package.find(params[:id])
    @package.destroy
    flash[:success] = "Package deleted."
    redirect_to admin_packages_path
  end    

  private
    def package_params
      params.require(:package).permit(:name, :price, :class, :description, :order)
    end
end

1 个答案:

答案 0 :(得分:2)

我注意到你的&#34; package_params&#34;你好像有一个叫做class的属性。对于Ruby / Rails中的属性,类是一个非常糟糕的名称。这可能是问题所在。