Rails 5的多个嵌套属性,没有路由错误未初始化的常量站点

杰姆建

您好,我有一个带有三个嵌套模型Client,Site和Damper的小应用程序。当我添加一个client或client_site时,一切都很好...但是当我添加一个阻尼器时,我得到了

Routing Error
uninitialized constant Sites

在控制台中

Started GET "/clients/1/sites/1/dampers/new" for my ip at 2018-10-26 18:05:29 +1000

ActionController::RoutingError (uninitialized constant Sites):

app/controllers/clients/sites/dampers_controller.rb:1:in `<main>'

路线

resources :clients do
  resources :sites, controller: 'clients/sites' do
    resources :dampers, controller: 'clients/sites/dampers'
  end
end

楷模

app / models / client.rb

class Client < ApplicationRecord
  has_many :sites
end

app / models / site.rb

class Site < ApplicationRecord
  belongs_to :client
  has_many :dampers
end

app / models / damper.rb

class Damper < ApplicationRecord
  belongs_to :site
end

请注意,我犯了一个错误,它原来是:sites,但是即使更改了此错误,仍然存在错误。

控制器

app / controllers / clients_controller.rb

class ClientsController < ApplicationController
  before_action :set_client, only: [:show, :edit, :update, :destroy]

  # GET /clients
  # GET /clients.json
  def index
    @clients = Client.all
  end

  # GET /clients/1
  # GET /clients/1.json
  def show
    @client = Client.find(params[:id])
    @sites = @client.sites
  end

  # GET /clients/new
  def new
    @client = Client.new
  end

  # GET /clients/1/edit
  def edit
  end

  # POST /clients
  # POST /clients.json
  def create
    @client = Client.new(client_params)

    respond_to do |format|
      if @client.save
        format.html { redirect_to @client, notice: 'Client was successfully created.' }
        format.json { render :show, status: :created, location: @client }
      else
        format.html { render :new }
        format.json { render json: @client.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /clients/1
  # PATCH/PUT /clients/1.json
  def update
    respond_to do |format|
      if @client.update(client_params)
        format.html { redirect_to @client, notice: 'Client was successfully updated.' }
        format.json { render :show, status: :ok, location: @client }
      else
        format.html { render :edit }
        format.json { render json: @client.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /clients/1
  # DELETE /clients/1.json
  def destroy
    @client.destroy
    respond_to do |format|
      format.html { redirect_to clients_url, notice: 'Client was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_client
      @client = Client.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def client_params
      params.require(:client).permit(:name)
    end
end

app / controllers / clients / sites_controller.rb

class Clients::SitesController < ApplicationController
  before_action :set_client
  before_action :set_site, except: [:new, :create]

  # GET /sites
  # GET /sites.json
  def index
    @sites = Site.all
  end

  # GET /sites/1
  # GET /sites/1.json
  def show
    @client = Client.find(params[:client_id])
    @site = @client.sites.find(params[:id])
  end

  # GET /sites/new
  def new
    @site = Site.new
  end

  # GET /sites/1/edit
  def edit
  end

  # POST /sites
  # POST /sites.json
  def create
    @site = Site.new(site_params)
    @site.client = @client

    respond_to do |format|
      if @site.save
        format.html { redirect_to @client, notice: 'Site was successfully created.' }
        format.json { render :show, status: :created, location: @client }
      else
        format.html { render :new }
        format.json { render json: @client.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /sites/1
  # PATCH/PUT /sites/1.json
  def update
    respond_to do |format|
      if @site.update(site_params)
        format.html { redirect_to @client, notice: 'Site was successfully updated.' }
        format.json { render :show, status: :ok, location: @site }
      else
        format.html { render :edit }
        format.json { render json: @client.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /sites/1
  # DELETE /sites/1.json
  def destroy
    @site.destroy
    respond_to do |format|
      format.html { redirect_to sites_url, notice: 'Site was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_site
      @site = Site.find(params[:id])
    end

  def set_client
    @client = Client.find(params[:client_id])
  end

    # Never trust parameters from the scary internet, only allow the white list through.
    def site_params
      params.require(:site).permit(:name, :client_id)
    end
end

应用程序/控制器/客户端/站点/dampers_controller.rb

class Sites::DampersController < ApplicationController
  before_action :set_client
  before_action :set_site
  before_action :set_damper, except: [:new, :create]

  # GET /dampers
  # GET /dampers.json
  def index
    @dampers = Damper.all
  end

  # GET /dampers/1
  # GET /dampers/1.json
  def show
  end

  # GET /dampers/new
  def new
    @damper = Damper.new
  end

  # GET /dampers/1/edit
  def edit
  end

  # POST /dampers
  # POST /dampers.json
  def create
    @damper = Damper.new(damper_params)
    @damper.site = @site

    respond_to do |format|
      if @damper.save
        format.html { redirect_to @site, notice: 'Damper was successfully created.' }
        format.json { render :show, status: :created, location: @site }
      else
        format.html { render :new }
        format.json { render json: @site.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /dampers/1
  # PATCH/PUT /dampers/1.json
  def update
    respond_to do |format|
      if @damper.update(damper_params)
        format.html { redirect_to @site, notice: 'Damper was successfully updated.' }
        format.json { render :show, status: :ok, location: @site }
      else
        format.html { render :edit }
        format.json { render json: @site.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /dampers/1
  # DELETE /dampers/1.json
  def destroy
    @damper.destroy
    respond_to do |format|
      format.html { redirect_to dampers_url, notice: 'Damper was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_damper
      @damper = Damper.find(params[:id])
    end
  def set_site
    @site = Site.find(params[:site_id])
  end
  def set_client
    @client = Client.find(params[:client_id])
  end

    # Never trust parameters from the scary internet, only allow the white list through.
    def damper_params
      params.require(:damper).permit(:location, :number, :site_id, :client_id)
    end
end
帕万

ActionController :: RoutingError(未初始化的常量Sites)

dampers_controller.rb下坐着controllers/clients/sites,所以你需要改变类名

class Clients::Sites::DampersController < ApplicationController

代替

class Sites::DampersController < ApplicationController

为了命名空间

另外,我建议您看看controller-namespaces-and-routing

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Rails 路由错误:带有嵌套资源的未初始化常量

Rails的路由错误-未初始化的常量SubscribersController

Rails:路由错误未初始化的常量 RegistrationsController

Rails路由“未初始化的常量CoursesController”

Rails路由:未初始化的常量ClanController

Rails-Sidekiq错误未初始化的常量

Rails未初始化的常量名称错误

Rails显示错误“未初始化的常量URI :: Generic”

Ruby on Rails“未初始化的常量”错误

名称错误“未初始化的常量”ruby on rails

Ruby on Rails 5未初始化的常量ApplicationRecord(NameError)

rails 5迁移未初始化的常量

NameError:未初始化的常量(rails)

Rails路由错误“未初始化的常数”

Rails,未初始化的常量Rails入门

未初始化的常量ActionView :: CompiledTemplates :: FB Ruby on Rails

耙子流产了!未初始化的常量Rails :: SubTestTask

Rails has_many:通过未初始化的常量

Rails:NameError(未初始化的常量UserSerializer)

Rails:NameError:未初始化的常量Bootsnap :: CompileCache :: ISeq

rails 未初始化的常量 Class::News (NameError)

Rspec / Rails:未初始化的常量ActiveSupport :: Autoload(NameError)

未初始化的常量Twilio :: Rest Rails

Rails / Factory Girl:未初始化的常量FactoryGirl(NameError)

Rails CSV导入-未初始化的常量Object :: Points

Rails:未初始化的常量控制器

Rails:控制器内部未初始化的常量

在rails中使用gem时未初始化的常量

与Rails相关的模型以“ NameError未初始化的常量”退出