如何根据主题

时间:2017-09-16 09:08:21

标签: ruby-on-rails

我是Rails的相对先发者,如果有一种方式可以在“联系人”上发送消息,我很好奇。根据所选主题,可以将网站页面发送到特定的电子邮件地址。我使用简单表单生成表单,这就是我在'联系人'页:

<%= f.input :subject, collection: [:Curriculum, :Jobs, :Other], prompt: 'Subject', required: true, error: 'You must select one' %>

在我的contact.rb文件中,我将header方法定义为:

def headers
    {
        subject: "Contact Form",
        to: "******.*******@gmail.com",
        from: %("#{name}" <#{email}>)
    }
end

这就是我想要完成的事情:

1)用户选择&#39; Curriculum&#39;。消息被发送到例如&#39; headteacher@s​​chool.org' ;.
2)用户选择&#39;其他&#39;。消息被发送到例如&#39; info@school.org' ;.
3)用户选择&#39;工作&#39;。消息被发送到例如&#39; hr@school.org'

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

首先设置两个具有一对多关联的模型:

class Inquiry < ApplicationRecord
  belongs_to :subject
end

class Subject < ApplicationRecord
  has_many :inquiries 
end

虽然您可以使用硬编码哈希,但是使用数据库中的行的yaml文件或其他解决方案会将应用程序逻辑与特定的实现细节分离。在数据库中存储查询记录还可以帮助您抵御电子邮件故障。

让我们设置一个路径控制器并查看查询:

resources :inquiries, only: [:new, :create]
class InquiriesController
  def new
    @inquiry = Inquiry.new
  end

  def create
    @inquiry = Inquiry.new(inquiry_params)

    if @inquiry.save
      # This is just an example showing how you would get the data:
      send_mail(
        to: @inquiry.subject.email
        subject: @inquiry.subject.title
        body: @inquiry.message
      )
    else
      render :new
    end
  end

  def inquiry_params
    params.require(:inquiry).permit(:email, :name ,:message, :subject_id)
  end
end
<%= form_for(@inquiry) do |f| %>
   # ...
   <div class="field">
     <%= f.label :subject_id, 'Subject' %>
     <%= f.collection_select(:subject_id, Subject.all, :id, :name, prompt: true) %>
   </div>
   <%= f.submit 'Send' %>
<% end %>