如何在sign_up表单中拒绝空白和空属性?

时间:2013-04-30 12:37:13

标签: ruby-on-rails rails-activerecord hstore

我有

模型

class User < ActiveRecord::Base
  attr_accessible :email

  validates :email,
    presence: true

  serialize :data, ActiveRecord::Coders::Hstore

  %w[zipcode first_name].each do |key|
    attr_accessible key

    define_method(key) do
      data && data[key]
    end

    define_method("#{key}=") do |value|
      self.data = (data || {}).merge(key => value)
    end
  end
end

控制器

class UsersController < ApplicationController
  def create
    @user = User.find_or_initialize_by_email(params[:user][:email])

    if @user.update_attributes(params[:user])
      redirect_to :back, notice: "Thanks for sign up!"
    else
      render "pages/home"
    end
  end
end
使用客户端验证

查看

<%= simple_form_for User.new, validate: true do |f| %>
  <%= f.input :email %>
  <%= f.input :first_name %>
  <%= f.input :zipcode %>
  <%= f.button :submit, 'Sign up' %>
<% end %>

第一个问题:我想更新现有用户记录,但如果param是""" ",则不会更新,如何实现此目标?

第二个问题:我应该使用create行动吗?也许update会更清楚。但是这个表单也创建了一个用户对象。

第三个问题:是否有机会在电子邮件属性中添加uniqueness验证?现在我的客户端验证不允许这样做。

1 个答案:

答案 0 :(得分:1)

首先:要禁止使用空字符串更新字段,请设置allow_blank: false,您也可以allow_nil: false。将这些添加到模型中的验证中。

第二:N / A

第三:只需在模型中的电子邮件验证中添加uniqueness: true即可。

了解更多here