Флажок выбора и форма объекта не сохраняются - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть форма, которая включает в себя:

  • два флажка
  • текстовое поле для сбора адресов электронной почты

Я не уверен, что это лучший дизайн, но модель содержит три атрибута:

  • email_name (введите строку)
  • send_once (тип boolean)
  • send_anytime (тип boolean)

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

Казалось, все работает, как я ожидал, но как только я заглянул в консоль рельсов, модель регистрации была пуста.

Мой лог-файл гласит:

Started POST "/pages" for 127.0.0.1 at 2012-02-01 16:34:55 -0500
Processing by PagesController#create as HTML
Parameters: {"utf8"=>"✓",  "authenticity_token"=>"WChW/OmDPS2Td1D3x/36aCJj7V75FdiAPJ9AQvtAIS4=", "post"=>{"email_address"=>"email@examp.le", "send_once"=>"0", "send_any_time"=>"1"}, "commit"=>"Create Signup"}
(0.3ms)  BEGIN
(0.5ms)  SELECT 1 FROM "signups" WHERE "signups"."email_address" = '' LIMIT 1
(0.3ms)  ROLLBACK
Rendered pages/_form.html.erb (3.7ms)

Как мне это сделать? На данный момент модель не сохраняет. Итак, как конкретно должна выглядеть модель и контроллер?

ПРИМЕЧАНИЕ: Я создаю signup объект внутри контроллера Pages (думаю: информационный бюллетень).

Контроллер

class PagesController < ApplicationController
 def index
  @signup = Signup.new
 end

def create
 @signup = Signup.new(params[:signup])
 respond_to do |format| 
  if @signup.save
    format.html
    #format.js
  else
    format.html {render action: :index}
   end
  end
 end
end

Модель

class Signup < ActiveRecord::Base
  attr_accessible :email_address
  # email_regex = come up with something
  validates :email_address, presence: true,
                        #format: {with: email_regex}, uniqueness: {message: 'there can only be one you.'}                                    
end

_ form.html.erb

<%= form_for(@signup, as: :post, url: pages_path) do |f| %>
  <% if @signup.errors.any? %>
    <div id="error_explanation">
    <p><%= pluralize(@signup.errors.count, "error") %> prohibited this post from being saved:</p>
   <ul>
    <% @signup.errors.full_messages.each do |user| %>
    <li><%= user %></li>
    <% end %>
   </ul>
  </div>
 <% end %>

 <div class="field">
   <%= f.label :email_address %><br />
   <%= f.email_field :email_address %>
   <%= f.label :send_once %><br />
   <%= f.check_box :send_once %>
   <%= f.label :send_any_time %><br />
   <%= f.check_box :send_any_time %>

  </div>

  <div class="actions">
   <%= f.submit %>
  </div>
<% end %>

1 Ответ

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

Ваши параметры передаются в виде: post, а ваш оператор создания ищет параметры [: регистрация].Вам нужно либо изменить свой контроллер для поиска параметров [: post], либо изменить форму для отправки в params [: регистрация].

<%= form_for(@signup, as: :signup, url: pages_path) do |f| %>

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

"signup"=>{"email_address"=>"email@examp.le", "send_once"=>"0", "send_any_time"=>"1"}

Вы хотите сделать:

class PagesController < ApplicationController
  def index
   @signup = Signup.new
  end

  def create
    @signup = Signup.new(params[:signup])
    if @signup.send_once == "1" or @signup.send_any_time == "1" then
      respond_to do |format| 
        if @signup.save
          format.html
        else
          format.html {render action: :index}
        end
      end
    else
      # what do you want to do if they didn't sign up?  redirect somewhere?
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...