Ruby is already using the class name of my model

☆樱花仙子☆ 提交于 2020-01-11 03:50:28

问题


I'm making a forum application with various levels of authorization, one of which is a Monitor. I am doing this by extending my User class, and I plan on fine tuning this with "-ship" classes (e.g. administratorship, authorship, moderatorship, etc.). Apparently the Monitor class is part of ruby mixin. How do I keep my resource name without the collisions?


回答1:


Some possibilities:

  • avoid the require 'monitor.rb' call which is pulling in the standard Monitor instance
  • do some runtime magic to rename the existing Monitor class.
  • monkey with your load path so that require 'monitor.rb' pulls in an empty implementation of Monitor.

But in all cases you could end up with the situation where a 3rd party library is using Monitor expecting it to be the standard Monitor class. So, I'd advise against any of the above.

I'd say your only two reasonable options are:

A) you could put your class in a namespace:

Module MyApp
  class Monitor
    #...
  end
end

if your app uses some kind of auto-require magic (e.g it's a rails app) then you would put your implementation in /my_app/monitor.rb. When you wanted to refer to that class you would do something like my_monitor = MyApp::Monitor.new(), or whatever.

B) you could use a different class name :)




回答2:


Declare your Monitor class in other module.

module MyModule

  class Monitor

  end

end



回答3:


FYI, I just found a neat trick (errr, hack) to get around this which may work.

I work on a large legacy application which, unfortunately, has a "Fixture" model which is quite important and which is used everywhere. When running tests, it's impossible to create a Fixture instance because of the Fixture class used by ActiveRecord when running tests. So I did the following:

FixtureModel = Fixture.dup

This freezes my class in place so that I can refer to it later (but just in my tests!) without being extended by the ActiveRecord Fixture class (which is not namespaced)



来源:https://stackoverflow.com/questions/2694333/ruby-is-already-using-the-class-name-of-my-model

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!