-1

私は持っている

モデル

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 が""または" "の場合はそうではありません。これを達成するにはどうすればよいですか?

2 番目の質問:そのためcreateにアクションを使用する必要がありますか? 多分updateもっと明確になるでしょう。ただし、このフォームはユーザー オブジェクトも作成します。

3 番目の質問:uniqueness電子メール属性に検証を追加する機会はありますか? 現在、私のクライアント側の検証では、それが許可されていません。

4

1 に答える 1

1

最初: 空の文字列を含むフィールドの更新を許可しないようにするには、次のように設定allow_blank: falseすることもできますallow_nil: false。これらをモデルの検証に追加します。

2 番目: 該当なし

uniqueness: true3 番目:モデルのメール検証に追加するだけです。

詳細はこちら

于 2013-04-30T15:06:43.267 に答える