首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未定义方法`bookings_path‘

未定义方法`bookings_path‘
EN

Stack Overflow用户
提问于 2013-12-10 23:54:04
回答 1查看 200关注 0票数 0

我有一份表格要填写预订细节,但我得到了以下错误:

代码语言:javascript
运行
复制
NoMethodError in Bookings#new
undefined method `bookings_path'

这发生在更改routes.rb文件后,将预订资源嵌套在用户资源中。

我的表单文件代码如下:

代码语言:javascript
运行
复制
<% 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>

我的预订控制器代码是:

代码语言:javascript
运行
复制
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文件如下所示:

代码语言:javascript
运行
复制
Hightide::Application.routes.draw do

  resources :users do
    resources :bookings

  end

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

Stack Overflow用户

回答已采纳

发布于 2013-12-11 02:44:49

您有此错误,因为您的bookings路由嵌套到users,所以当您编写以下内容时

代码语言:javascript
运行
复制
form_for @booking

本质上你打电话给

代码语言:javascript
运行
复制
form_for bookings_path, ...

因为rails获取您发送给form_for的对象的类型,并尝试为其获取普通路径。

要解决这个问题,您需要在路由中创建普通的bookings资源,或者为form_for调用指定一个用户和一个预订引用,如下所示

代码语言:javascript
运行
复制
form_for [current_user, @booking]
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20507836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档