1

当我尝试将理发师添加到我的数据库时出现错误。

我收到以下错误:

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

我的观点 new.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
4

3 回答 3

1

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

你需要一个带有 #create 方法的 BarberController。

像这样创建资源:

resources :shop do

resources :barber

end

一家商店有理发师。

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

于 2012-04-18T12:58:30.123 回答
1

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

<%= form_for @barber, url: shop_path do |f| %>
于 2012-04-18T13:02:24.020 回答
-2

代替:

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

试试这个:

<%= form_for(@barber) do |f| %>
于 2012-04-18T12:56:19.013 回答