2017-11-03 49 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。它可以如此简单。