【问题标题】:Rails use nesting and resource path with other modelRails 在其他模型中使用嵌套和资源路径
【发布时间】:2013-12-29 08:16:27
【问题描述】:

我有这样的方法控制器:

class Admin::CarManufacturersController < ApplicationController
  def edit
    @man = Manufacturer.find(params[:id])
    render :layout => 'admin'
  end

  def update
    @man = Manufacturer.find(params[:id])
    if @man.update_attributes(params[:car_manufacturer])
      ****
    else
      render :action => :edit, :layout => 'admin'
    end
  end
end

我有这样的路线:

namespace :admin do
  resources :car_manufacturers do
    ###
  end
end

和这样的形式部分:

= form_for [:admin, @man] do |f|
  ###

但是当我调用这个表单来编辑我的数据时,我得到:

undefined method `admin_manufacturer_path'

但我需要 admin_car_manufacturer_path,因为我在控制器中使用了其他型号名称,但我无法更改它...我如何使用正确的通行证?我尝试以形式编写 admin_car_manufacturer_path,但我认为这是个坏主意。如何解决我的问题?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    我会考虑重命名您的控制器/模型以匹配。两者都应该只是制造商或汽车制造商。资源的控制器和模型使用相同的名称可以避免像现在这样的问题。

    无论如何,如果您只需要快速修复,您可以通过为嵌套路由指定 as 选项来解决此问题,如下所示:

    namespace :admin do
      resources :manufacturers, as: :car_manufacturers do
        ###
      end
    end
    

    来源:Rails Routing from the Outside In - Ruby on Rails Guides - 3.6: Naming Routes

    这会将您的路径名称转换为admin_car_manufacturer_path 等,并且应该允许您以您想要的方式使用您的表单。但我真的建议重命名您的模型和控制器,以便它们匹配。

    【讨论】:

    • 然后我得到未初始化的常量 Admin::ManufacturersController
    • 我可以将控制器重命名为制造商,但是如果我有名为 Model 和 Type(汽车主题)的模型,它会打破常规......
    • 为什么不直接使用namespace :admin do resources :car_manufacturers end ,然后使用admin_car_manufacturer_path
    • 因为命名空间 :admin 做资源 :car_manufacturersdo 资源 :car_models 做资源 :car_types end end end
    • 我有很深的嵌套,需要按照我的要求做)
    猜你喜欢
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多