Попытка проверить контактную форму - PullRequest
1 голос
/ 29 февраля 2012

Я полный новичок в рельсах, и я пытаюсь создать подтверждение для контактной формы. Я запустил код проверки, но если я просто загружу свою страницу контактов и нажму "Отправить", она не будет отображать ошибок проверки.

Вот форма, на мой взгляд:

  <%= form_for :message, :id => 'contactForm', :url => { :action => "create" } do |f|-%>

        <%= label_tag 'name', 'Name:' %>
        <%= f.text_field 'name', :class =>'required requiredField' %> 

        <%= label_tag 'email', 'Email:' %>
        <%= f.email_field 'email', :class =>'required requiredField email' %>

        <%= label_tag 'message', 'Message:' %>
        <%= f.text_area 'message', :class => 'required requiredField', :rows => 20, :cols => 30 %>

        <%= f.submit :class => 'button' do -%>
            <a href="#" class="button" style="float:right;"><span>Submit</span></a>
        <% end %>
    <% end -%>

Контроллер:

class ContactController < ApplicationController

    layout "content"

    def index
        @activeLi = "contact"
    end

    def new
        @message = Message.new
    end

    def create
        @message = Message.new(params[:message])

        if @message.valid?
            # need to actually send the email message here
            flash[:notice] = "Message sent! We will get back to you shortly."
            redirect_to root_url
        else 
            render :action => 'new'
        end
    end

end

Модель:

class Message

    include ActiveModel::Validations
    include ActiveModel::Conversion
    extend ActiveModel::Naming

    attr_accessor :name, :email, :message

    validates_presence_of :name, :email, :message
    validates_length_of :message, :maximum => 4000

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

    def persisted?
        false
    end
end

маршруты:

get "contact/index"
post "contact/create"

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Вы отправляете форму обратно в действие: index, но не в том месте, где в действии: index вы пытаетесь создать и сохранить экземпляр ContactModel.Пока вы не сделаете это, оно никогда не будет подтверждено.Вы хотите добавить что-то вроде этого в ваше действие: index:

if request.post?cm = ContactModel.new (... параметры идут здесь ...), если cm.save # все хорошо, иначе # выкладывать ошибки end end

Я бы предложил не называть вашу модель "ContactModel" (избавьтесь«Модель»).ContactRequest, ContactSubmission и т.д ... что-то в этом роде.

Также проверьте http://railscasts.com/episodes/326-activeattr.Очень применимо к тому, что вы делаете.

И, наконец, переключите ваш form_tag на form_for и используйте новый экземпляр вашей модели.Сохраняет вещи красивыми и чистыми.

1 голос
/ 29 февраля 2012

Измените строку поста в вашем rout.rb на

post 'contact/create'
get 'contact/new'
1 голос
/ 29 февраля 2012

Я сам новичок в Rails - изучаю его только месяц.Если я вас правильно понял, вы хотели бы показать ошибки при отправке вашей формы.Я надеюсь, что ваша модель не будет сохранена в БД при отправке без правильных значений из-за validates_presence_of в вашей модели.Вам, вероятно, понадобится следующий код в вашей форме чуть ниже тега form_for.Любые ошибки проверки будут показаны тогда.

<% if @message.errors.any? %>
<h4>Errors</h4>
<ul>
    <% @message.errors.full_messages.each do |message| %>
        <li><%= message%></li>
    <% end %>
</ul>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...