2014-02-25 129 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'