0

我正在尝试向另一个我未登录的用户发送一封电子邮件,该用户在另一个名为“user2”的设计模型上,他们使用该站点的方式与“用户”不同。当我创建一条新消息时,我可以通过以下方式向 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

但是我收到一个错误,我认为它有一个 nil 电子邮件,那么我怎样才能找到并设置 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

要根据创建操作回答您的问题,您不会为该操作创建 @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 关联,则在将 @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,它似乎为零。

于 2012-08-06T01:59:06.473 回答