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#createshop

于 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 に答える