允许current_user通过电子邮件向用户发送@user#show /

时间:2014-01-01 15:51:14

标签: ruby-on-rails ruby-on-rails-4 actionmailer

我已经设置了Rails 4 ActionMailer,以便在新用户注册时向我(作为网站管理员)发送电子邮件(注册#create - 我正在使用Devise)。

现在我希望current_user能够通过电子邮件发送他们当前正在查看其个人资料的用户。因此,在users#show我希望有一个表单,只需生成一封电子邮件:to @user.email:from current_user.email(可选择通过文本输入覆盖),也可能是邮件的正文。< / p>

信息记录并不重要。对于这个实现,我让用户的收件箱处理所有历史记录。事实上,如果可以通过模型/控制器传递数据,我宁愿不存储该数据。如果添加正文必须使用MessagesController,那么我宁愿把它留下来。

非常感谢。

2 个答案:

答案 0 :(得分:0)

从RYAN http://railscasts.com/episodes/326-activeattr?view=asciicast

查看此railscast

这就是你所需要的一切

答案 1 :(得分:0)

      <%= form_for(Message.new) do |f| %>
          <div class="form-inputs">
            <%= f.text)area :message %>
          </div>
          <%= f.hidden_field :sender_email, value: current_user.email %>
          <%= f.hidden_field :receiver_email, value: @user.email %>

          <div class="form-actions">
            <button type="submit">Email</button>
          </div>
      <% end %>

您的消息模型将如下所示

class Message
  include ActiveModel::Model


  def initialize(attributes = {})
    attributes.each do |name, value|
      send("#{name}=", value)
    end
  end

  def persisted?
    false
  end
end

消息控制器

class MessagesController < ApplicationController


  def create
    @message = Message.new(params.require(:message).permit(:sender_email, :receiver_email, :message))
    if @message.valid?
      MessageMailer.send_message(@message).deliver
      redirect_to profile_url, notice: "Message sent"
    else
      render :new
    end
  end
end

class MessageMailer < ActionMailer::Base
  def send_message(message)
    @body = message.message
    @from = message.sender_email
    @to = message.receiver_email
    mail to: @to, :subject => "new mail", :from => @from
  end
end

以上代码未经测试希望它能满足您的需求