商店#new中的NoMethodError



当我尝试将理发师添加到我的数据库中时,我收到错误。

我收到以下错误:

NoMethodError in Shop#new
Showing /Users/Augus/Rails/Barbershop/app/views/shop/new.html.erb where line #3 raised:
undefined method `barbers_path' for #<#<Class:0x105e7b818>:0x105bfe360>
Extracted source (around line #3):
1: <H1>New barber</H1>
2: 
3: <%= form_for @barber do |f| %>
4:  <%= f.text_field :name %> <br />
5:  <%= f.submit %>
6: <% end %>

我不知道我做错了什么。

我的shop_controller.rb:

  def new
    @barber = Barber.new
  end

我的观点新.html.erb:

<H1>New barber</H1>
<%= form_for @barber do |f| %>
    <%= f.text_field :name %> <br />
    <%= f.submit %>
<% end %>
<%= link_to 'Back', shop_path %>

我也在我的路线中得到这个:

  resources :shop
默认情况下,

Rails会尝试根据您传入的对象找出发送表单的路径。在您的情况下,Rails 会尝试根据您的@barber对象构建发送表单的路径。正如您的routes.rb所示,您没有写resources :barbers并且您的表单无法找到正确的路径。您必须直接指定路径。像这样:

<%= form_for @barber, url: shop_path do |f| %>

当您提交新的记录表单时,将调用函数控制器#create。 控制器#new 是生成包含表单的页面的函数。

您需要一个具有 #create 方法的理发控制器。

按如下所示创建资源:

resources :shop do

resources :barber

end

一家商店有理发师。

然后form_for [@shop, @barber], :action => 'create'将触发BarberController#create其中的最后一行可能应该重定向到 shop .

而不是:

<%= form_for @barber do |f| %>

试试这个:

<%= form_for(@barber) do |f| %>

最新更新