確定...上面edgeguides碼 - 困惑特定錯誤
<%= form_for :article, url: articles_path do |f| %>
<% if @article.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@article.errors.count, "error") %> prohibited
this article from being saved:</h2>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :text %><br>
<%= f.text_area :text %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
<%= link_to 'Back', articles_path %>
好吧,代碼爲http://edgeguides.rubyonrails.org/getting_started.html
的問題涉及到這部分:
<%= form_for :article, url: articles_path do |f| %>
<% if @article.errors.any? %>
如果我改變:article
到@article
在第一行,它仍然有效。它應該,因爲它們可以互換,是的?
但是,如果我改變了第二個這樣的:
@article.errors.any?
到:article.errors.any?
它產生的錯誤,特別是這樣的:
undefined method 'errors' for :article:Symbol
爲什麼?
請保持溫柔,因爲我仍然在試圖弄清楚看起來很明顯的東西。
在這裏大聲思索,爲什麼符號不能用於第二行是因爲它需要一個實例來收集錯誤,對嗎?
但是,是不是符號可以與實例互換?這意味着Rails應該讀取該行並將其轉換爲實例,即它找到模型類的實例,是的?
編輯
顯然,我沒看過遠遠不夠了,我可沒有采取心臟是我以前的form_for幫手了...
EdgeGuides代碼後說,這:
The first parameter of the form_tag can be an object, say, @article which would cause the helper to fill in the form with the fields of the object. Passing in a symbol (:article) with the same name as the instance variable (@article) also automagically leads to the same behavior. This is what is happening here. More details can be found in form_for documentation.
的關鍵是的form_for幫手。
這就是爲什麼它不適用於第二行...因爲它無法弄清楚如何填寫符號的位置。
希望這可以幫助一些其他可憐的傢伙/女孩。
ps。隨時糾正我,如果我的編輯是錯誤的。
你有沒有得到你的問題的答案仍然有一些疑問? –