Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails 4关注错误_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 4 Rails 4关注错误

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 :

我注意到rails4中的
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