私はモンゴイドを使用した非常に単純なモデルを持っています。 Redcarpetを使ってMDを解析して保存しました。しかし、update_attributesの間に例外をスローしています。モデルを実行し、rails c
で更新プログラムを実行すると正常に動作します。モデル内のユニット化された定数
class Post
include Mongoid::Document
field :contents_markdown
field :contents
key :title
before_create :markdown
before_save :markdown
protected
def markdown
if self.contents_markdown
self.contents = Redcarpet.new(self.contents_markdown).to_html.html_safe
end
end
end
ここでコントローラが爆発します。
def update
@post = Post.find(params[:id])
respond_to do |format|
if @post.update_attributes(params[:post])
format.html { redirect_to @post, notice: 'Post was successfully updated.' }
format.json { head :ok }
else
format.html { render action: "edit" }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
ここでは例外とスタックトレースがあります。私はモデルからものを削除したので、行番号は少しオフになります。
uninitialized constant Post::Redcarpet
app/models/post.rb:20:in `markdown'
app/controllers/posts_controller.rb:62:in `block in update'
app/controllers/posts_controller.rb:61:in `update'
重要な場合は、MRI 1.9.2-p290とRails 3.1-rc5を実行しています。
編集 - これは、テストを実行してコンソールから実行しても問題ありません。しかし、コントローラを更新してモデルを作成することは、常に失敗するようです。さらに、スタックトレースからは、モデルが標準の場所にあることがわかります。
私は私のGemfileに宝石の依存関係があります。モデルは 'rails c 'を実行しているときに動作します。 – tgandrews
正しいパスから 'require'ロードを実行するために' gem'を宣言する必要があることに気がつきましたが、 'require'がまだ実行されていなければなりません。おそらく、コンソール環境には異なる '$ LOAD_PATH'やオートローダーの設定があります。 – tadman
ありがとうございます。私はイニシャライザにrequireを追加し、これを修正しました。できるだけ早くあなたの答えを受け入れます。 – tgandrews