Ruby on rails 4 Rails 4关注错误
我注意到rails4中的Ruby on rails 4 Rails 4关注错误,ruby-on-rails-4,Ruby On Rails 4,我注意到rails4中的concern的新特性,并在中阅读了它的文档。 但它似乎不像我预期的那样有效。这是我的/models/concerns/current_user.rb的代码 require 'active_support/concern' module CurrentUser extend ActiveSupport::Concern module ClassMethods def accessor_current_user attr_accessor :
concern
的新特性,并在中阅读了它的文档。
但它似乎不像我预期的那样有效。这是我的/models/concerns/current_user.rb
的代码
require 'active_support/concern'
module CurrentUser
extend ActiveSupport::Concern
module ClassMethods
def accessor_current_user
attr_accessor :current_user
end
end
end
class ActiveRecord::Base
include CurrentUser
end
您可能会注意到我的代码的最后3行,这是因为我希望我的所有模型都可以调用该方法,我认为这可能是实现这一点的一个好方法。但当我启动rails服务器时,它无法调用访问器\u current\u user
方法。所以我对此感到困惑。我真的不知道原因。希望有人能帮助我。:)
更新! 最后,我发现在初始值设定项中创建一个
ActiveRecord::Base
类,然后在类中包含CurrentUser可能是一个好方法 试试看:
require 'active_support/concern'
module CurrentUser
extend ActiveSupport::Concern
included do
attr_accessor :current_user
end
module ClassMethods
end
end
class ActiveRecord::Base
include CurrentUser
end
那么你应该可以做这样的事情:
foo = Foo.new
foo.current_user
其中Foo
是:
class Foo < ActiveRecord:Base
include CurrentUser
end
class Foo
您调用访问者\u当前用户的方式是错误的。通过这种方式,您可以调用ActiveRecord::Base.accessor\u current\u user
方法,它将执行代码而不会出现任何错误。然后你可以打电话
但是使用ActiveSupport::Concern实现attr_访问器的正确方法是
如果您是在rails中编写代码,那么就不需要
要求“主动支持/关注”
。请参考谢谢你的回答,你能解释一下吗?我试图添加最后两行,但仍然无法工作。最后两行仅用于说明。您不应该添加它们。基本思想是在包含CurrentUser
模块的任何类上添加attr\u访问器。这是通过include
块完成的。我知道如果我在Foo类中添加include CurrentUser
,可以很好地工作,但这不是我想要的。假设您有8个模型需要调用accessor\u current\u user
方法,因此您需要在所有8个模型中添加include CurrentUser
,我认为这不是最好的方法。因此,我想知道是否可以编写一些代码来实现这个目标。为每个ActiveRecord::Base
子类包含CurrentUser
模块不是一个好主意。
ar = ActiveRecord::Base.new
ar.current_user = "foo"
ar.current_user # this will return 'foo'
module CurrentUser
extend ActiveSupport::Concern
included do
attr_accessor :current_user
end
end