2013-09-03 3 views
0

Итак, у меня есть сайт static_pages #, в котором я хочу, чтобы люди помещали свой адрес электронной почты в форму, которая сохранит ее в базе данных моего NewslettersController. Но я не работаю для меня, я могу ввести свой адрес электронной почты и нажать «Отправить», но он не будет сохранен в базе данных или проверен в модели.Простая форма бюллетеня

Посмотреть static_pages # дом, который является корнем

<%= form_for Newsletter.new, :url => { :controller => "newsletters", :action => "create" } do |f| %> 
    <%= f.text_field :email, :style => "width:50%;", :placeholder => "Your email address", :class => "form-control input-sm" %> 
    <%= f.submit "Keep me updated", :class => "btn btn-primary btn-sm" %> 
<% end %> 

Модель

class Newsletter < ActiveRecord::Base 
    attr_accessible :email 

    validates_uniqueness_of :email 
    validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i 
end 

Контроллер

class NewslettersController < ApplicationController 

    def create 
    @newsletter = Newsletter.new(params[:newsletter]) 

    respond_to do |format| 
     if @newsletter.save 
     format.html { redirect_to root_path, notice: 'You will hear from us shortly, Thank You' } 
     else 
     format.json { render json: @newsletter.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

end 

    resources :newsletters, :only => :create 

EDIT:

Посмотреть

<%= form_for @newsletter do |f| %> 
    <%= f.text_field :email, :style => "width:50%;", :placeholder => "Your email address", :class => "form-control input-sm" %> 
    <%= f.submit "Keep me updated", :class => "btn btn-primary btn-sm" %> 
    <% if @newsletter.errors.any? %> 
     <div id="error_explanation"> 
     <h2><%= pluralize(@newsletter.errors.count, "error") %> prohibited this email address from being saved:</h2> 

     <ul> 
     <% @newsletter.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
     <% end %> 
     </ul> 
     </div> 
    <% end %> 
<% end %> 

ответ

0

Вы можете реорганизовать свой код так:

приложение/контроллеры/static_pages.rb

def home 
    @newsletter = Newsletter.new 
end 

На ваш взгляд:

<%= form_for @newsletter do |f| %> 

Что касается вашего вопроса, вы возможно, захотите проверить @newsletter.errors, чтобы проверить, прошел ли процесс проверки или нет.

Try:

class NewslettersController < ApplicationController 

    respond_to :html 

    def create 
    @newsletter = Newsletter.new(params[:newsletter]) 
    @newsletter.save 

    respond_with @newsletter 
    end 
end 
+0

Я редактировал представление и контроллер в статических страницах, но он по-прежнему оленья кожа сохранить в базе данных или дать мне какие-либо сообщения об ошибках. См. Редактирование в оригинальной записи. :/ – Pierre

+0

Дело в том, что вы отвечаете в JSON, если произошли какие-либо ошибки. Отредактировал мой ответ. –

+0

<% = @ newsletter.errors.messages%>, который дает мне эту пустую строку {: email => []}. Я также изменил свой контроллер на ваш пример, но ничего не создается, и я не получаю никаких сообщений об ошибках. – Pierre

Смежные вопросы