2014-02-25 59 views
1

局部变量,据我了解,我们使用即一个实例变量的方法new实例变量VS在创建方法

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 

回答

1

你不能,因为@article变量也用于new.html.erb文件,当article没有成功保存渲染。

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

+0

是啊,你是对的。它由'new'使用。我刚刚知道了,当我的rspec测试失败了,所以它提供了'新'。由于我使用了“article”的本地版本,因此最终出现了一条错误消息。谢谢。 – fade2black

3

这意味着你不明白render :new

此行意味着将显示new方法的视图,但方法本身不会被调用。这就是为什么你需要变量是实例变量,因为如果验证失败,你将需要它通过它来形成。

看看在guides了解更多信息

PS render :new相同render 'new'