2017-11-03 50 views
0

我知道這是一個超級noobie問題,我現在正在學習導軌。我正在學習Rails入門指南,並且我已經正確地遵循了每一步,但是當我到達「The First Forms」部分時。它似乎一直給我一個「NoMethodError在文章#新」錯誤消息。以下是完整的錯誤:爲什麼我一直得到一個NoMethodError?我通過「開始使用導軌」指南學習導軌

undefined method `form_with' for #<#<Class:0x007f31e8904248>:0x007f31dc290b70> 
Did you mean? form_tag 

這裏是表單代碼:

<%= form_with scope: :articles, local: true do |form| %> 
    <p> 
    <%= form.label :title %><br> 
    <%= form.text_field :title %> 
    </p> 

    <p> 
    <%= form.label :text %><br> 
    <%= form.text_area :text %> 
    </p> 

    <p> 
    <%= form.submit %> 
    </p> 
<% end %> 

我似乎無法理解爲什麼它不工作。你認爲這個問題是什麼?我見過一些說使用form_for的答案,但也給了我一個錯誤。

而且,我使用:

Rails: 5.0.6 

感謝提前:)

回答

2

如果使用則導軌5.1的form_for /的form_tag替換form_with

請確認您的軌道版本?你的情況是5.0.6,這就是爲什麼它拋出錯誤

如果低於5.1則使用表單標籤或的form_for

嘗試 1)的form_for

<%= form_for @article do |form| %> 
    <p> 
     <%= form.label :title %><br> 
     <%= form.text_field :title %> 
    </p> 
    <p> 
      <%= form.label :text %><br> 
      <%= form.text_area :text %> 
     </p> 
     <p> 
      <%= form.submit %> 
     </p> 
<% end %> 

2)form_tag的

<%= form_tag articles_path do %> 
     <p> 
      <%= label_tag :title %><br> 
      <%= text_field_tag :title %> 
     </p> 
     <p> 
       <%= label_tag :text %><br> 
       <%= text_field_tag :text %> 
      </p> 
      <p> 
       <%= submit_tag "submit" %> 
      </p> 
    <% end %> 

form_tag和form_for被軟棄用,它們將在未來被form_with替換。

如果你沒有它的基礎模型,那麼你使用form_tag。

<%= form_tag users_path do %> 
    <%= text_field_tag :email %> 
    <%= submit_tag %> 
<% end %> 

當你有一個模型,然後你使用了form_for。你可以看到,我們使用form_for的form builder字段助手,但是我們並沒有使用form_tag來完成。所以這兩種形式的語法是不同的。

這不是form_with的情況,因爲我們始終使用表單構建器。

form_with沒有一個模型:

<%= form_with url: users_path do |form| %> 
    <%= form.text_field :email %> 
    <%= form.submit %> 
<% end %> 

form_with與模型:

<%= form_with model: @user do |form| %> 
    <%= form.text_field :email %> 
    <%= form.submit %> 
<% end %> 

當您設置模型參數,那麼範圍和網址會自動從它衍生出來的。這種行爲與form_for類似。

+0

在你的第二個例子中,當我相信你的意思是引用'form_tag'時,你有'form_for'# – MisterCal

+0

哦...是的,需要用form_tag更新 –

1

相信form_with在Rails的5.1推出。你正在使用Rails 5.0.6。儘管在考慮更新rails之前,我會嘗試將:articles更改爲單數:article。它可以如此簡單。