2012-02-08 8 views
1

問題

私は贈り物に対する約束をすることができるアプリがあります。質疑書が作成されたら、プレゼンジャーに電子メールによる確認を送信する必要があります。サーバーはメールを送信しようとしたときに500 Internal Server Errorを発行しています。ActionMailerがmongoidオブジェクトを配信しないのはなぜですか?

コンテキスト:

  • のRuby on Railsの3.2.0
  • actionmailerの3.2.0
  • Mongoid 2.4.3私はactionmailerのを使用しました
  • シン1.3.1

これは私の初めてのモンゴイドとの仕事です。

コード

class Pledge 
    include Mongoid::Document 
    field :name, :type => String 
    field :email, :type => String 
    field :amount, :type => Float 

    embedded_in :gift 
end 


class PledgesController < ApplicationController 
    def create 
    @gift = Gift.find(params[:gift_id]) 
    @pledge = @gift.pledges.new(params[:pledge]) 

    respond_to do |format| 
     if @pledge.save 
     PledgeMailer.pledge_confirmation(@pledge).deliver 
     format.html { redirect_to :root, notice: 'Pledge successfully created.' } 
     else 
     ... 
     end 
    end 
    end 
... 
end 


class PledgeMailer < ActionMailer::Base 
    default :from => "[email protected]" 

    def pledge_confirmation(pledge) 
    @pledge = pledge 
    mail(:to => pledge.email, :subject => "Thanks - pledge confirmation") 
    end 
end 

ログイン

それでは[email protected]Sam Andreasギフト4f2695009f5b7f3464000001ため$42.42を約束しましょう。

これはうれしくMongodbに保存され、:rootにリダイレクトされます。

Started POST "/gifts/4f2695009f5b7f3464000001/pledges" for 127.0.0.1 at 2012-02-08 14:13:21 +1100 
Processing by PledgesController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"EwgOwALSb8uUsT4Ow1+RBvAEihXKXoqKS1JA9ZfpUfg=", 
    "pledge"=>{"name"=>"Sam Andreas", "email"=>"[email protected]", "amount"=>"42.42"}, 
    "commit"=>"Create Pledge", "gift_id"=>"4f2695009f5b7f3464000001"} 
    MONGODB danspressie_development['gifts'].find({:_id=>BSON::ObjectId('4f2695009f5b7f3464000001')}).limit(-1).sort([[:_id, :asc]]) 
    MONGODB danspressie_development['gifts'].update({"_id"=>BSON::ObjectId('4f2695009f5b7f3464000001')}, {"$push"=>{"pledges"=>{"_id"=>BSON::ObjectId('4f31e8519f5b7f41d1000002'), "name"=>"Sam Andreas", "email"=>"[email protected]", "amount"=>42.42}}}) 
    Completed 500 Internal Server Error in 11ms 

SyntaxError (/Users/daniel/Dropbox/dev/src/danspressie/app/mailers/pledge_mailer.rb:4: invalid multibyte char (US-ASCII) 
/Users/daniel/Dropbox/dev/src/danspressie/app/mailers/pledge_mailer.rb:4: syntax error, unexpected $end, expecting keyword_end 
    def pledge_confirmation(pledge) 
^): 
    app/controllers/pledges_controller.rb:8:in `block in create' 
    app/controllers/pledges_controller.rb:6:in `create' 

は難しい苦労が、エラーがpledge_confirmationにある場所を確認することはできません。PledgeMailerへの呼び出しを追加することで、我々が得ます。

あなたは何か指針を持っていますか? :)

+0

'cat -v pledge_mailer.rb'を試してください。これは、奇妙なバイトがどこにあるのかを示すはずです。 –

+0

@muistooshortありがとう!私は他のバイトを見つけませんでした。しかし、私はMischaの答えに従ってそれを再作成し、問題を修正しました。 –

答えて

2

コードは正常です。エラーは「マルチバイト文字(US-ASCII)が無効です」というエラーが表示されます。 pledge_mailer.rbを一から作成し、US-ASCIIではなくcharset UTF-8で保存する方がよいでしょう。

+0

ありがとう@mischa。これはトリックをした:) –

関連する問題