私はRuby on Rails 3.0.7を使用していますが、私のアプリケーションにはact_as_article
プラグインを実装しようとしています。私のやりたいことは、そのプラグインの中でバリデーションの "プラグインとしての記事クラス"のメソッドを実行することです(注:私のプラグインは動作するためにデータベーステーブルの列を作成する必要があります。プラグインでの検証方法
# 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
クラスは、属性を持っていません。私は、プラグインのコード内で私はこの
module Article
...
included do
# validates :title, # Validation
# :presence => true
end
...
end
のような検証方法をコメントアウトした場合ので、私はもうエラーが出ていないと思います。
だから、どうすればこの問題を解決できますか?
注:
これはおそらく次のような場合に役立ちます。https://github.com/apneadiving/Google-Maps-for-Rails/blob/master/lib/gmaps4rails/acts_as_gmappable.rb – apneadiving