当我尝试将理发师添加到我的数据库中时,我收到错误。
我收到以下错误:
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| %>