ruby-on-rails - 命名空间路由和模型路径 rails

标签 ruby-on-rails ruby module routes namespaces

我刚开始使用 Rails,直到现在我对它非常满意,但有一件事我想不通。

我在命名空间“Monitor”中有一些 ActiveRecords 模型,在命名空间“Settings”中有一些 Controller 。我想要完成的是我可以在我的设置 Controller /表单中使用命名空间模型。

我有这个:

/config/routes.rb

namespace :settings do
  resources :queues, :channels
end

/app/controllers/settings/queus_controller.rb

class Settings::QueuesController < ApplicationController

  def new
    @queue = Monitor::Queue.new()
    render 'form', :layout => false
  end

  def create
    @queue = Monitor::Queue.new(post_params)

    if (@queue.save)
      @status = 'added'
      render 'success'
    else
      render 'form', :layout => false
    end
  end

  def edit
    @queue = Monitor::Queue.find(params[:id])
    render 'form', :layout => false
  end

  ...
end

/app/models/monitor/queue.rb

module Monitor
  class Queue < ActiveRecord::Base
  end
end

/app/views/settings/form.html.erb

<%= form_for @queue do |f| %>
  ...
<% end %>

现在 Rails 提示缺少方法:monitor_queues_path 或 Rails 生成类似 /monitor/queues 的路径而不是 /settings/queues(:new/编辑)

我在这里错过了什么?

最佳答案

啊,我找到了!

这篇文章给了我正确的解决方案: Rails namescoped model object without module prefix route path

问题来自 ActiveRecord 类的前缀:

module Monitor
  class Queue < ActiveRecord::Base
  end
end

应该是

module Monitor
  class Queue < ActiveRecord::Base
    def self.model_name
      ActiveModel::Name.new("Monitor::Queue", nil, "Queue")
    end
  end
end

更改后,我只需要以正确的方式更改 form_for:

<%= form_for [:settings, @queue] do |f| %>

然后修复它 :D

关于ruby-on-rails - 命名空间路由和模型路径 rails ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17820007/

相关文章:

python - 如何在模块中搜索函数/类?

ruby-on-rails - 如何让current团队对Tire进行过滤?

javascript - 使用 React-rails 实现不显眼的 JS

ruby-on-rails - Ajax page.replace_html 部分在 Rails 中的问题

ruby-on-rails - 日期时间范围的计算

error-handling - Ansible:模拟一个 "passed when"模块

Python line_profiler 找不到模块

ruby-on-rails - Ruby 无法加载此类文件 -- dm--adapter (LoadError)

ruby - 为什么 puts 方法不调用我的 .to_s 方法?

ruby-on-rails - Ubuntu Cron Job 进程不会自动释放内存