2013-12-10 50 views
0

我有一个表格填写预订资料,但我发现了以下错误:未定义的方法`bookings_path”

NoMethodError in Bookings#new 
undefined method `bookings_path' 

这是发生变化的routes.rb文件后,窝在预订资源用户资源。

我的表单文件的代码如下:

<% provide(:title, 'Book Now!') %> 

<section id="book-now"> 

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

    <header> 
     <h1>Edit booking</h1> 
    </header> 

     <%= f.text_field :name,   placeholder: "Name" %> 
     <%= f.text_field :check_in,  placeholder: "Check-in" %> 
     <%= f.text_field :check_out, placeholder: "Check-out" %> 

     <%= f.submit "Save" %>  

    <% end %> 

</section> 

我的预订控制器代码是:

class BookingsController < ApplicationController 

    def new 
    @booking = Booking.new 
    end 

    def create 
    @booking = Booking.new(params_bookings) 
    @booking.user_id ||= current_user.id 
     if @booking.save 
      redirect_to user_path(@booking.user_id) 
     else 
     # render 'new' 
     end 
    end 
    end 

    private 

    def params_bookings 
    params.require(:booking).permit(:check_in, :check_out, :name, :user_id) 
    end 

end 

和我的routes.rb文件看起来像这样:

Hightide::Application.routes.draw do 

    resources :users do 
    resources :bookings 

    end 

    match '/users/:user_id/bookings/new',  to: 'bookings#new', via: [:post, :get] 

回答

1

你有这个错误,因为你的bookings路由嵌套到users,所以当你写E本

form_for @booking 

你基本上调用

form_for bookings_path, ... 

堂妹导轨让你发送到form_for对象的类型,并试图让香草路径它。

解决你需要无论是在你的路由创建香草bookings资源,或指定用户,并为form_for电话预约基准问题,像这样

form_for [current_user, @booking]