Deviseで確認画面 ~ちょっとマシだと信じたい方法 2012冬~
/confirm 足したくなかった(Controller弄りたくなかった)っていうのと、<%= render "devise/shared/links" %> をそのまま使いたかった、できる限りViewに条件とか書きたくないっていうのがあった。 汚いとは思うけど、個人的に許容できるギリギリの感じで、まあこんなもんかって感じ。
app/models/user.rb
class User < ActiveRecord::Base attr_accessor :confirmed, :under_confirming attr_accessible :confirmed, :under_confirming validates :confirmed, :presence => { :message =>'is not confirmed' } after_validation :set_under_confirming def set_under_confirming if errors.keys.reject { |e_name| e_name == :confirmed }.empty? self.under_confirming = true else self.under_confirming = false end end end
app/views/users/registrations/new.html.erb
<h2>Sign up</h2> <%= form_for resource, :as => resource_name, :url => registration_path(resource_name) do |f| %> <%= f.label :email %> <% if resource.under_confirming %> <!-- For confirming --> <%= resource.email %> <%= f.hidden_field :email %> <%= f.hidden_field :confirmed, :value => 1 %> <%= f.submit "登録" %> <% else %> <%= devise_error_messages! %> <!-- For new form --> <%= f.email_field :email %> <%= f.submit "確認画面に行くぞ〜" %> <% end %> <%= render "devise/shared/links" %> <% end %>