4

ユーザーの行動に基づいてポイント/バッジ/ランクをユーザーに付与するために見つけた優れたプラグインを実装しています。これは Merit と呼ばれ、 https ://github.com/tute/merit で見つけることができます。

「投稿」と「タグ」の 2 つのモデルがあります。関連付けは次のとおりです。投稿には多くのタグがあり、タグは投稿に属しています。

ユーザーが「投稿」を作成すると、ポイントが付与されます。投稿コントローラーの「作成」アクションが呼び出されるたびにポイントを付与するようにプラグインを構成します。

問題:

サーバーを起動したら、関連付けられたタグを使用して新しい投稿を作成するフローを実行します。これは完全に機能します。コードを(コントローラーまたはモデルで)何らかの方法で編集するまで、完全に機能します。編集後、新しい投稿を作成しようとすると、次のエラーが発生します。

undefined method `attr_accessible' for Merit::Action:Class

ファイルの基本的な内容を変更する限り、どのような編集を行うかは問題ではないようです (これには、単にデバッグの「puts」ステートメントを追加することも含まれます)。この時点で、投稿を作成しようとするたびに同じエラーが発生するため、投稿をまったく作成できなくなりました。次に、WEBrick を再起動すると、再び機能します (コードを再度編集するまで)。

ここで何が起きてるの? コードを編集するという単純な行為によって、サーバーを再起動するまで Merit プラグインで attr_accessible が突然未定義になるのはなぜですか?

4

1 に答える 1

0

これは ruby​​ クラスのリロードの問題のようです。

変更したファイルとともにプラグインがリロードされていないため、gem の動作が新しいコードに再注入されていないと思います。Rails サーバーを再起動すると、アプリのコードと gem のコードが同期され、gem の動作をアプリのコードに挿入できます。

それは理にかなっていますか?

于 2013-08-21T10:12:04.243 に答える