【问题标题】:Proper way to define a namespaced model in Ruby on Rails在 Ruby on Rails 中定义命名空间模型的正确方法
【发布时间】:2011-09-16 21:39:04
【问题描述】:

只是想知道在 Rails 中定义命名空间模型的正确方法是什么。我已经看到它以两种方式定义。在大多数库中,它们似乎是这样定义的

module Fruit
  class Banana < ActiveRecord::Base
     ...
  end
end

而 Rails 生成器似乎更喜欢这个

class Fruit::Banana < ActiveRecord::Base
  ...
end

它们显然都有效,但有什么区别?哪个是首选?谢谢!

【问题讨论】:

    标签: ruby-on-rails namespaces


    【解决方案1】:

    它们并不相同,更详细的方式将实际定义模块,而较短的方式将期望它已经定义。

    class Fruit::Banana; end
    

    这将引发NameError。但是,如果你这样做

    module Fruit; end
    class Fruit::Banana; end
    

    它不会抛出错误。

    【讨论】:

    • 哇,你说得对。 irb(main):002:0&gt; class Fruit::Banana; endNameError: uninitialized constant Fruit
    【解决方案2】:

    它们是相同的,但“更长”版本允许您向模块添加其他内容。 更喜欢这样,因为我经常会以这种方式将多个小东西打包到一个模块中。

    【讨论】:

      【解决方案3】:

      它们是相同的,其次只是语法糖。

      【讨论】:

      • 这不是真的。我添加了一个解释自己的答案。
      猜你喜欢
      • 1970-01-01
      • 2015-06-14
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 2015-02-10
      • 2010-10-28
      相关资源
      最近更新 更多