Rails使用嵌套和资源路径与其他模型

时间:2013-12-28 21:28:40

标签: ruby-on-rails ruby

我有这样的方法控制器:

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,但我认为这是个坏主意。如何解决我的问题?

1 个答案:

答案 0 :(得分: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等,并且应该允许您按照预期的方式使用您的表单。但我真的建议重命名模型和控制器,使它们匹配。