2011-07-02 7 views
4

Ruby on Rails 3.0.7을 사용하고 있으며 응용 프로그램에 act_as_article 플러그인을 구현하려고합니다. 내가 뭘 할 것인가? 유효성 확인 해당 플러그인 내에서 "기사 클래스로 작동"방법 (참고 : 작동하려면 일부 데이터베이스 테이블 열을 만들어야합니다.이 중 하나는 title 특성으로 표시됩니다).플러그인의 유효성 검사 방법

# vendor/plugins/article/lib/acts_as_article.rb 
module Article 
    extend ActiveSupport::Concern 

    included do 
    validates :title, # Validation method 
     :presence => true 
    end 

    module ClassMethods 
    def acts_as_article 
     send :include, InstanceMethods 
    end 
    end 

    module InstanceMethods 
    ... 
    end 
end 

ActiveRecord::Base.send :include, Article 


# app/models/review.rb 
class Review 
    acts_as_article 

    ... 
end 

플러그인이 작동 위의 코드를 사용하여 내 RoR에 응용 프로그램에서

이 코드가 있습니다. 나는이 같은 Review 클래스의 일부 기록 협회를 추가하지만 경우 :

class Review 
    acts_as_article 

    has_many :comments # Adding association 

    ... 
end 

및 내 ReviewsController에 나뿐만 아니라, 다음을 추가

def create 
    ... 

    @article.comments.build( # This is the code line 89 
    :user_id => @user.id 
) 

    if @article.save 
    ... 
    end 
end 

나는이 오류가

NoMethodError (undefined method `title' for #<Comments:0x00000103abfb90>): 
    app/controllers/articles_controller.rb:89:in `create' 

아마 모든 Review "관련"클래스 \ 모델에 대해 유효성 검사가 실행되고 Comment 클래스 에는title 속성이 없습니다. 플러그인 코드 내부에서 이와 같은 유효성 검사 메서드를 주석 처리하기 때문에

module Article 
    ... 

    included do 
    # validates :title, # Validation 
    # :presence => true 
    end 

    ... 
end 

더 이상 오류가 발생하지 않는다고 생각합니다.

그래서 어떻게이 문제를 해결할 수 있습니까?

:

+0

아마도 도움이 될 수 있습니다. https://github.com/apneadiving/Google-Maps-for-Rails/blob/master/lib/gmaps4rails/acts_as_gmappable.rb – apneadiving

답변

2

당신은 ... 나는 (이것은 내 첫 시간) 플러그인을 만드는 방법에 대한 전문가가 아니다, 그래서 플러그인 구현을위한 좋은 일을하고 있어요 만약 내가 암시 적으로도 문의 ActiveRecord :: Base에 validates_presence_of : title을 포함하여 모든 활성 레코드 모델이이를 선택합니다. 대신 다음을 수행해야합니다.

# vendor/plugins/article/lib/acts_as_article.rb 
module Article 
    extend ActiveSupport::Concern 

    module ClassMethods 
    def acts_as_article 
     validates :title, # Add validation method here 
     :presence => true 
     send :include, InstanceMethods 
    end 
    end 

    module InstanceMethods 
    ... 
    end 
end 

유효성 검사를 통과해야하는 ActiveRecord 모델에만 유효성 검사를 포함하면됩니다. 이것이 귀하의 문제를 해결하면 알려주십시오.

+0

네, 문제가 해결되었습니다. – Backo

관련 문제