加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在rails命名空间模型中丢失命名空间信息

发布时间:2020-12-17 02:31:33 所属栏目:百科 来源:网络整理
导读:使用rails scaffolding创建命名空间模型时,您将获得两个文件.例如,这个脚手架: rails generate model Staff::Location name:string address:string 生成这些文件: /app/models/staff.rb module Staff def self.table_name_prefix "staff_" end .../app/mod
使用rails scaffolding创建命名空间模型时,您将获得两个文件.例如,这个脚手架:

rails generate model Staff::Location name:string address:string

生成这些文件:

/app/models/staff.rb    
module Staff
  def self.table_name_prefix
    "staff_"
  end
  ...

/app/models/staff/location.rb
class Staff::Location < ActiveRecord::Base
  ...

我在开发模式下遇到问题,其中rails卸载Staff模块并且从不重新加载它.由于缺少table_name_prefix,这会导致一些恼人的错误,例如Location无法访问它的表.当我不直接访问模型时,例如通过多态关系,问题似乎就出现了.

我似乎无法在一致的基础上加载模块.这是进行命名空间模型的最佳实践方法吗?如果是的话,我错过了什么?

解决方法

虽然我无法在Rails 3.2.2中重现这个问题,但我之前遇到过类似的问题.在开发模式中解决此问题的一般方法是通过ActionDispatch回调.将其添加到config / environments / development.rb:

MyApp::Application.configure do
  ActionDispatch::Callbacks.before do
    load Rails.root.join('app','models','staff.rb')
  end
end

您在该块中执行的任何操作都将在每个请求之前执行,因此请确保您只在开发模式下执行此操作.?否则,您将在生产中遇到性能损失.

我在staff.rb文件和Staff模块本身内部记录了一条消息,并且每条请求的日志中都显示了这两条消息.

?我尝试使用to_prepare回调,因为它似乎是the documented way to execute code before each request only when cache_classes is false.但这似乎只是在重新启动应用程序后执行.至少有one other open Stack Overflow question regarding this,尽管他使用的语法与我使用的略有不同.如果你能够准备工作,我会建议而不是之前.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读