0

ログインしておらず、「user2」と呼ばれる別の Devise モデルを使用している別のユーザーにメールを送信しようとしています。彼らは「user」とは異なる方法でサイトを使用しています。新しいメッセージを作成すると、次のようにして current_user にメールを送信できます。

UserMailer.new_message_sent_user(current_user).deliver

次に UserMailer で:

def new_message_sent_user(user)
 @user = user
 mail to: @user.email, subject: "New message sent to user2!"
end

ただし、「user2」にもメールを送信する必要がありますが、IDでそれらを見つけてアクションメーラーにメールを渡すのに苦労しています。メッセージの作成時に正常に保存されているため、user2_id に値があることはわかっています。新しいアクションで私は見つけました:

@user2 = User2.find(:first,:conditions=>["id = ?", @post.user2_id])

次に、作成時に私が持っている

UserMailer.new_message_sent_user2(@user2).deliver

次に、UserMailer には次のようなものがあります。

#send to advisor when he has sent a new message to an advisor
def new_message_sent_user2(user2)
     @user2 = user2
     mail to: @user2.email, subject: "You have received a message from user"
end

しかし、エラーが発生しました。メールがゼロだと言っていると思いますが、メールを送信するように user2 オブジェクトを見つけて設定するにはどうすればよいですか?:

undefined method `email' for nil:NilClass

どんな助けでも大歓迎です!

create アクションで更新します。

# POST /messages
# POST /messages.json
def create

   @message = current_user.messages.build(params[:message])

   respond_to do |format|
   if @message.save

   UserMailer.new_message_sent_user(current_user).deliver
   UserMailer.new_message_sent_user2(@user2)

   format.html { redirect_to users_path, notice: 'Your message has been sent!' }
    format.json { render json: @message, status: :created, location: @message }

   else
    format.html { render action: "new" }
    format.json { render json: @message.errors, status: :unprocessable_entity }
   end
 end
end
4

2 に答える 2

1

create アクションに基づいて質問に答えるには、そのアクションの @user2 インスタンスを作成していません。インスタンス変数は、new => create アクションまたは edit => update から引き継がれません。したがって、追加する必要があるのは

@user2 = User2.find(params[:user2_id]) #assuming you have the user2_id as part of the submitted form.

ユーザーに関連して :user2_id をどこに保存しているか正確にはわかりませんが、それが has_many/belongs to 関連付けである場合は、@user が user2 も設定するように設定された直後の方が簡単かもしれません

@user2 = @user.user2 #this will return an array of associated user_2's

最終的なアクションは次のようになります。

def create

   @message = current_user.messages.build(params[:message])
   @user2 = User2.find(params[:user2_id]) #or whatever selector

   respond_to do |format|
   if @message.save

   UserMailer.new_message_sent_user(current_user).deliver
   ...
end
于 2012-08-06T12:38:28.903 に答える
0

@user2 を確認してください。nil のようです。

于 2012-08-06T01:59:06.473 に答える