2013-08-13 3 views
0

rails4에 concern의 새로운 기능이 있음을 알았습니다.이 문서의 내용은 http://edgeapi.rubyonrails.org/classes/ActiveSupport/Concern.html입니다. 하지만 예상대로 작동하지 않는 것 같습니다. 내 코드는 /models/concerns/current_user.rb입니다.레일 4 관련 오류

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 개 라인, 그건 통지하고 나는 그것을 달성하기 위해 좋은 방법이 될 수있다 생각합니다. 하지만 레일즈 서버를 시작하면 accessor_current_user 메서드를 호출 할 수 없습니다. 그래서 나는 이것을 혼란스럽게 생각합니다. 나는 그 이유를 정말로 모른다. 누군가 나를 도울 수 있기를 바랍니다. :)


업데이트! 마지막으로, 이니셜 라이저 fold에서 ActiveRecord::Base 클래스를 만든 다음 클래스에 CurrentUser를 포함시키는 것이 좋은 방법이라는 것을 알았습니다.

답변

1

시도 :

foo = Foo.new 
foo.current_user 

Foo은 다음과 같습니다 :

class Foo < ActiveRecord:Base 
    include CurrentUser 
end 
+0

답변 해 주셔서 감사합니다. 설명해 주시겠습니까? 마지막 2 줄을 추가하려고했지만 여전히 작동하지 않습니다. – hsming

+0

마지막 2 줄은 여기에 설명되어 있습니다. 추가하지 마십시오. 기본적인 아이디어는'CurrentUser' 모듈을 포함하는 클래스에'attr_accessor'를 추가하는 것입니다. 이것은'included' 블록으로 처리됩니다. –

+0

글쎄, Foo 클래스의'include CurrentUser'를 추가해도 잘 작동 할 수는 있지만, 원하는 것은 아닙니다. 8 개의 모델이'accessor_current_user' 메소드를 호출 할 필요가 있다고 가정하면, 8 가지 모델 모두에'include CurrentUser'를 추가 할 필요가 있습니다. 나는 그것이 최선의 방법이라고 생각하지 않습니다. 그래서 그 목표를 달성하기 위해 몇 가지 코드를 작성할 수 있는지 궁금합니다. – hsming

0

당신이 accessor_current_user를 호출하는 방법은 잘못

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 

이 그럼 당신은 같은 것을 할 수 있어야한다 . 이렇게하면 ActiveRecord::Base.accessor_current_user 메서드를 호출 할 수 있으며 오류없이 코드가 실행됩니다. 그리고 당신이 ActiveSupport :: 우려를 사용하여 attr_accessor입니다 구현하는

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 

당신이 레일에서 코드를 작성하는 경우, 그러면 require 'active_support/concern'이 필요하지 않습니다. 참조하시기 바랍니다 http://blog.neerajk.com/articles/2014-11-26-is-active-support-concern-really-another-concern/