为ContacUs页面提供rails控制器模型视图建议

时间:2013-01-17 12:40:17

标签: ruby-on-rails-3 email model controller

我有一个用rails 3编写的简单静态网站。

该网站有一个名为pages的控制器,每个静态页面都作为视图提供。例如页面/主页,页面/关于,页面/价格等。这一切都很有效。

我现在遇到一个问题,我需要添加一个简单的联系人功能,但我很难在模型/控制器/视图中找到它。

我已经有一个带有联系人视图的页面控制器,该视图有详细地址等。现在我需要在联系人视图中获取消息模型,以便我可以填充模型attirbutes并发送电子邮件。

我/我是否可以在页面控制器中创建一个新的消息模型,如,

  class PagesController < ApplicationController

  def contact

   def new
    @message  = Message.new
   end

   def create
     @message = Message.new(params[:message])
     if @message.valid?
      # TO DO send message here using OS mail program.

      redirect_to root_url, notice: "Message sent! Thank you for contacting us."
     else
       render "new"
     end  
    end
  end

  def about

  end

  def products

  end

  def portfolio

  end

  def services

  end

end

或者我应该从页面控制器中取出联系人视图并创建名为消息的新控制器吗?

感谢。

1 个答案:

答案 0 :(得分:1)

我会有一个名为contact的独立控制器,例如new和create actions

def new
@message = Message.new
end

def create
@message = Message.new(params[:message])
if @message.valid?
  NotificationsMailer.new_message(@message).deliver
  redirect_to(root_path, :notice => "Message was successfully sent.")
else
  flash.now.alert = "Please fill all fields."
  render :new
end
end 

end

然后是一个单独的模型来处理你的消息

 class Message 
 include ActiveModel::Validations
 include ActiveModel::Conversion
 extend ActiveModel::Naming

 attr_accessor :name, :email, :subject, :body, :file

 validates :name, :email, :subject, :body, :presence => true
 validates :email, :format => { :with => %r{.+@.+\..+} }, :allow_blank => true

 end

你的属性可以是你喜欢的任何东西,显然这只是你能做什么的一个例子