ruby-on-rails - Rails 嵌套路由未定义方法

标签 ruby-on-rails ruby ruby-on-rails-4

我不断收到

undefined method 'orders_path' for #<#<Class:0x007faefee50a88>:0x007faefee414e8>

导航到我的新订单路径 url /users/1/orders/new

一直卡在这个问题上,不知道交易是什么。

路线:

devise_for :users, :path => 'accounts'

  resources :users, only: [:index, :show] do
      resources :orders
  end

根索引:

<%= link_to "Create an Order", new_user_order_path(current_user.id) %>

表格:

<%= form_for([@user, @order]) do |f| %>

<%= f.hidden_field :user_id %>

  <div class="form-group">
    <%= f.label :name %><br />
    <%= f.text_field :name, autofocus: true, class: "form-control" %>
  </div>

<% end %>

新:

<h1>New Order</h1>

<%= render 'form' %>

<%= link_to 'Back', user_orders_path(@user) %>

最佳答案

当你写下这个:

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

Rails 正在寻找 orders_path,但您实际上并没有这样的路由,因为您已经定义了嵌套在 users 下的 orders 资源> 资源。因此,您必须将 @user@order 传递给表单,如下所示:

<%= form_for([@user, @order]) do |f| %>
    # your code goes here
<% end %>

如果您以这种方式编写表单,那么 Rails 将查找此路径:user_orders_path,该路径将与您定义的路线匹配并且可以正常工作,并且您将不会再收到此错误:

undefined method 'orders_path' for #<#<Class:0x007faefee50a88>:0x007faefee414e8>

所以,这将解决您当前的问题。但是,您当前的 new.html.erb 文件中存在另一个问题:

<%= link_to 'Back', user_orders_path %>

您必须将 @user 作为参数传递给此方法:

<%= link_to 'Back', user_orders_path(@user) %>

否则会再次失败。

希望这有助于解决您的问题。

关于ruby-on-rails - Rails 嵌套路由未定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33072074/

相关文章:

ruby-on-rails - 在简单的 ruby​​ 中从 Person 实例获取孙子

ruby-on-rails - 多态关联和嵌套属性

mysql - Apple Silicon 上的 Rails 和 MySQL

ruby-on-rails - 多个 Rails 引擎 rspec Controller 测试不起作用

ruby-on-rails - 无法安装 pg gem os X 10.11.6、Rails 5、ruby 2.3

html - rails -nokogiri GEM : Detect MIME type of image in URL

ruby - 无法自动加载常量 Controller (在生产中)。开发没有错误

ruby-on-rails - 混合使用 ERB 和 Rails 路径助手编译 YAML

ruby-on-rails - Rails 中未显示视频 HTML 标记

ruby-on-rails - unicorn worker 的第一 react 慢了几秒钟