【发布时间】:2012-02-24 14:31:50
【问题描述】:
我有一个表格,其中包括:
- 两个复选框
- 用于收集电子邮件地址的文本字段
我不确定这是否是最好的设计,但模型包含三个属性:
- email_name(类型字符串)
- send_once(布尔型)
- send_anytime(布尔型)
如果两个复选框中的任何一个被填写,我想保存电子邮件地址,否则不保存任何内容。
一切似乎都如我预期的那样工作,但是当我查看 rails 控制台内部时,注册模型是空的。
我的日志文件是这样写的:
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)
我该怎么做?目前该模型不保存。那么,具体来说,模型和控制器应该是什么样子的呢?
注意:我正在 Pages 控制器内创建一个 signup 对象(想想:新闻通讯)。
控制器
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 %>
【问题讨论】: