創建模型的空實例的點是圍繞你的新觀點股不少視圖代碼與編輯視圖,因此需要在模型上工作的想法。
例如,在許多情況下,新的和編輯頁面幾乎完全相同。您的文章的新頁面可能允許用戶輸入姓名,作者和發佈日期。現在用戶可能希望編輯這些信息,並且您可能會向他們顯示完全相同的三個文本字段以編輯姓名,作者和發佈日期。爲了幹這個(不要重複自己),你可以將該表單合併到單個視圖中。你最終會與看法是這樣的:
# new.html.haml
New Article
= render :partial => "form"
# edit.html.haml
Edit Article
= render :partial => "form"
# _form.html.haml
= text_field_tag "title", @article.title
= text_field_tag "author", @article.author
= text_field_tag "publishing_date", @article.publishing_date
顯然,當您正在編輯現有的文章,你需要從數據庫中提取數據,然後使用它的屬性來填寫表格。很多人做的是在新頁面上重複使用該表單,但現在表單期望有一個@article
變量,所以程序員在其new
操作中初始化一個空表單。
這也有助於如果您的表單部分需要在您的對象上調用方法。例如:
# article.rb
def published_today?
return (self.publishing_date.to_date == Date.today)
end
# _form.html.haml
- if @article.published_today?
%strong New!
但是如果你的新的編輯頁面不共享相同的代碼,你的新頁面不需要一個空模型實例創建的,則不用麻煩了,那也沒關係。
你是什麼意思「實例變量需要初始化」? – Fredius
如果你不需要它,請將其移除。如何檢查是否需要它?,只需轉到'articles'文件夾中的'new.html.erb'模板並看到它。在你的'new.html.erb'模板中,你可能會初始化一個新的'Article'實例,這就是你不需要這個變量的原因之一。 – fanta
如果你想使用表單助手,你需要它,否則你可以跳過初始化 –