Create方法中的实例变量与局部变量

时间:2014-02-25 12:57:03

标签: ruby-on-rails

据我所知,我们在方法new

中使用了一个实例变量
def new
  @article = Article.new
end

因为此变量也在new.html.erb中使用。 (如果我错了,请纠正我。)

但为什么我们在create方法中使用实例变量?它在create方法之外的其他地方使用了什么?我们不能只使用局部变量article而不是实例变量@article吗?

def create
  article = Article.new(article_params)

  if article.save
    flash[:success] = "Article created successfully!"
    redirect_to  articles_url
  else
    render 'new'
  end 
end

private  
def article_params
   params.require(:article).permit(:title, :body)
end

2 个答案:

答案 0 :(得分:3)

这意味着您无法理解render :new

此行表示将呈现new方法的视图,但不会调用方法本身。这就是为什么你需要变量作为实例变量的原因,因为如果验证失败,你将需要它将它传递给形式。

请查看guides以获取更多信息

PS render :newrender 'new'

相同

答案 1 :(得分:1)

您不能,因为@article变量也用在new.html.erb文件中,在article未成功保存时呈现。

所以你会得到(据我记忆)错误undefined method 'model_name' for nil:NilClass