0

我不确定我是否正确地用了这个标题,但我想在我的索引页面上有一个简短的联系表版本。问题是较短的版本仍然期望与长版本相同的验证,并且在出现错误时重定向到联系人/新路径。我将如何处理这样的情况;因为这个简短的联系表格需要与长版本不同的行为,我是否必须以某种方式一起制作不同的联系表格?任何有关如何执行此操作的帮助或建议将不胜感激。

简短
这是在根页面中

    <%= simple_form_for @contact, :html => {:class => 'form-horizontal' } do |f| %>
      <div class="form-group">
        <div class="control-label col-sm-3">
          <%= f.label :firstName, 'Name' %>
        </div>
        <div class="col-sm-6">
          <%= f.input_field :firstName, class: "form-control", placeholder: "Name" %><br/>
        </div>
      </div>

      <div class="form-group">
        <div class="control-label col-sm-3">
          <%= f.label :email, 'Email' %><br/>
        </div>
        <div class="col-sm-6">
          <%= f.email_field :email, class: "form-control", placeholder: "Email" %><br/>
        </div>
      </div>

      <div class="form-group">
        <div class="control-label col-sm-3">
          <%= f.label :phoneNumber, 'Phone' %>
        </div>
        <div class="col-sm-6">
          <%= f.input_field :phoneNumber, class: "form-control", placeholder: "Phone" %><br/>
        </div>
      </div>

      <div class="form-group">
        <div class="col-sm-6 col-sm-offset-3">
          <%= f.button :submit, 'Submit Request', :class=> "btn btn-primary" %>
        </div>
      </div>
    <% end %>

模型

    class Contact < MailForm::Base
  validates_presence_of :firstName, :lastName, :email, :budget, :message => "Can't Be Blank"

  attribute :firstName
  validates_format_of :firstName, :with => /\A([a-z]|[A-Z])/i

  attribute :lastName
  validates_format_of :lastName, :with => /\A([a-z]|[A-Z])/i

  attribute :company
  validates_format_of :company, :with => /\A([a-z]|[A-Z])/i,
                                :allow_blank => true

  attribute :email
  validates_format_of :email, :with => /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i,
                              :message => "Invalid Format"

  attribute :phoneNumber
  validates_format_of :phoneNumber, :with => /\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/i,
                                    :allow_blank => true,
                                    :length => { :minimum => 10, :maximum => 31 },
                                    :message => "Invalid Format"

  attribute :requestedArea, :validate => true
  validates_format_of :requestedArea, :with => /\A([a-z]|[A-Z])/i

  attribute :requestedState
  validates_format_of :requestedState, :with => /\A([a-z]|[A-Z])/i,
                                       :allow_blank => true
  attribute :requestedCity
  validates_format_of :requestedCity, :with => /\A([a-z]|[A-Z])/i,
                                      :allow_blank => true
  attribute :contactMethod
  attribute :budget, :validate => true
  attribute :numberOfRooms

  attribute :numberOfOccupants
  attribute :purpose
  attribute :pets
  attribute :petType
  attribute :numberOfPets
  attribute :arrivalDate

  attribute :departureDate
  validates_format_of :departureDate, :with => /\d{2}\/\d{2}\/\d{4}/i,
                                      :allow_blank => true
  def headers
    {
      :subject => "Quote Requested!",
      :to => "anthonydevenuto@gmail.com",
      :from => %(#{email})
    }
  end
end

控制器

class ContactsController < ApplicationController
  def new
    @contact = Contact.new
  end
  def create
    @contact = Contact.new(params[:contact])
    # @contact.request = request
    if @contact.deliver
      flash[:notice] = 'Thank you for your request. We will contact you soon!'
      redirect_to root_path
    else
      flash.now[:error] = 'Cannot send message.'
      render :new
    end
  end
end
4

1 回答 1

0

例如在模型中声明访问器属性,并在需要跳过一些验证时使用它。

class Contact < MailForm::Base
   attr_accessor :short_form

   validates_presence_of :firstName, :lastName, :email, :budget, :message => "Can't Be Blank", unless: -> { short_form }

   # etc
end

像这样在控制器中使用它:

def action
   contact = Contact.find_by_id(params[:id])

   # ... do with contact
   if params[:short_form]
       contact.short_form = true
   end

   contact.save!
end
于 2016-04-26T15:25:35.833 回答