我有一份表格要填写预订细节,但我得到了以下错误:
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]发布于 2013-12-11 02:44:49
您有此错误,因为您的bookings路由嵌套到users,所以当您编写以下内容时
form_for @booking本质上你打电话给
form_for bookings_path, ...因为rails获取您发送给form_for的对象的类型,并尝试为其获取普通路径。
要解决这个问题,您需要在路由中创建普通的bookings资源,或者为form_for调用指定一个用户和一个预订引用,如下所示
form_for [current_user, @booking]https://stackoverflow.com/questions/20507836
复制相似问题