nul*_*ull 22 ruby-on-rails separation-of-concerns
我关心的是我存储常量:
module Group::Constants
extend ActiveSupport::Concern
MEMBERSHIP_STATUSES = %w(accepted invited requested
rejected_by_group rejected_group)
end
Run Code Online (Sandbox Code Playgroud)
我希望使用这些常量的另一个问题是:
module User::Groupable
extend ActiveSupport::Concern
include Group::Constants
MEMBERSHIP_STATUSES.each do |status_name|
define_method "#{status_name}_groups" do
groups.where(:user_memberships => {:status => status_name})
end
end
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会导致路由错误:
uninitialized constant User::Groupable::MEMBERSHIP_STATUSES
Run Code Online (Sandbox Code Playgroud)
看起来第一个问题是在第二个问题中没有正确加载.如果是这样的话,我该怎么办呢?
Pin*_*nyM 32
看起来这种行为是设计的,正如在这里很好地解释的那样.
在这种情况下你需要做的是没有Group::Constants
扩展,ActiveSupport::Concern
因为这将阻止其实现与其他ActiveSupport::Concern
扩展模块共享(尽管它最终将在包含第二个模块的类中共享):
module A
TEST_A = 'foo'
end
module B
extend ActiveSupport::Concern
TEST_B = 'bar'
end
module C
extend ActiveSupport::Concern
include A
include B
end
C::TEST_A
=> 'foo'
C::TEST_B
=> uninitialized constant C::TEST_B
class D
include C
end
D::TEST_A
=> 'foo'
D::TEST_B
=> 'bar'
Run Code Online (Sandbox Code Playgroud)
简而言之,您需要制作Group::Constants
一个标准模块,然后一切都会很好.
归档时间: |
|
查看次数: |
9752 次 |
最近记录: |