2013-04-30 1 views
-1

나는이sign_up 양식 중에 빈 속성 및 빈 속성을 거부하는 방법은 무엇입니까?

모델

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

첫 번째 : 빈 문자열로 필드를 업데이트하지 않으려면 allow_blank: false으로 설정하고 allow_nil: false으로 설정할 수도 있습니다. 모델에서 유효성 검사에이를 추가하십시오. 둘째

: N/A

셋째 : 간단히 모델의 이메일 확인에 uniqueness: true를 추가합니다.

가 더 읽기 here

+0

하지만 난 hstore 데이터 컬럼에 저장된 모든 속성이 동작을 원한다면? – tomekfranek

+0

원래 게시물에없는 내용입니다. 나는 당신이 처음에 제시 한 질문들에 답했다. – Tomanow