2008年12月7日日曜日

ユーザ・プロファイル画面を作る。

なんか、段々実況するのが面倒になってきたwww

つうか、ね?
コード書いてるより、ブログかいてる方が、時間がかかってる気がするんだけどwww

まあ、いいやwwwwww
今回は、
  • 姓とミドルネームと名を連結したものを「本名」として扱う
  • 姓とミドルネームと名のvalidation
  • app/views/users/newとshowのブラッシュ・アップ
な感じで。
diff。

app/models/user.rb

+  validates_presence_of     :family_name
+  validates_format_of       :family_name,     :with => Authentication.name_regex,  :message => :bad_name_message, :allow_nil => true
+  validates_length_of       :family_name,     :maximum => 100
+
+  validates_format_of       :middle_name,     :with => Authentication.name_regex,  :message => :bad_name_message, :allow_nil => true
+  validates_length_of       :middle_name,     :maximum => 100
+
+  validates_presence_of     :given_name
+  validates_format_of       :given_name,     :with => Authentication.name_regex,  :message => :bad_name_message, :allow_nil => true
+  validates_length_of       :given_name,     :maximum => 100

-  attr_accessible :email, :nickname, :password, :password_confirmation
+  attr_accessible :email, :nickname, :family_name, :middle_name, :given_name, :password, :password_confirmation

+  def real_name
+    name = family_name + " "
+    name += "\"#{middle_name}\" " unless middle_name.nil?
+    name += given_name
+    name
+  end

   protected

app/views/layouts/application.html.erb

 <% form_for :user, :url => users_path do |f| -%>
+<dl class="account">
+  <%= content_tag("dt", label_tag('email', t('actionview.label.common.email'))) %>
+  <%= content_tag("dd", f.text_field(:email)) %>
+  <%= content_tag("dt", label_tag('password', t('actionview.label.common.password'))) %>
+  <%= content_tag("dd", f.text_field(:password)) %>
+  <%= content_tag("dt", label_tag('password_confirmation', t('actionview.label.common.password_confirmation'))) %>
+  <%= content_tag("dd", f.text_field(:password_confirmation)) %>
+</dl>
 
-<p><%= label_tag 'nickname', t('actionview.label.common.nickname') %><br />
-<%= f.text_field 'nickname' %></p>
+<dl class="profile">
+  <%= content_tag("dt", label_tag('nickname', t('actionview.label.common.nickname'))) %>
+  <%= content_tag("dd", f.text_field(:nickname)) %>
+  <%= content_tag("dt", t('actionview.label.common.real_name')) %>
+  <dd>
+    <dd>
+      <%= content_tag("dt", label_tag('family_name', t('actionview.label.common.family_name'))) %>
+      <%= content_tag("dd", f.text_field(:family_name)) %>
+      <%= content_tag("dt", label_tag('middle_name', t('actionview.label.common.middle_name'))) %>
+      <%= content_tag("dd", f.text_field(:middle_name)) %>
+      <%= content_tag("dt", label_tag('given_name', t('actionview.label.common.given_name'))) %>
+      <%= content_tag("dd", f.text_field(:given_name)) %>
+    </dd>
+  </dd>
+</dl>
 
-<p><%= label_tag 'email', t('actionview.label.common.email') %><br/>
-<%= f.text_field :email %></p>
-
-<p><%= label_tag 'passoword', t('actionview.label.common.password') %><br/>
-<%= f.password_field :password %></p>
-
-<p><%= label_tag 'password_confirmation', t('actionview.label.common.password_confirmation') %><br/>
-<%= f.password_field :password_confirmation %></p>
-
<p><%= submit_tag t('actionview.submit.user.signup') %></p>
<% end -%>

app/views/users/show.html.erb

+<dl>
+  <%= content_tag("dt", t('actionview.label.common.nickname'), :class => "nickname") %>
+  <%= content_tag("dd", @user.nickname) %>
+  <%= content_tag("dt", t('actionview.label.common.real_name'), :class => "real_name") %>
+  <%= content_tag("dd", @user.real_name) %>
+</dl>

こんな感じか?
real_nameメソッドは、実は、www.railscast.comRefactoring User Name Part 1を参考にして作ったんだけど、でも、これ、modelでやるよりも、helperで、user.idを基にして、フルネーム作った方がいいような気がしないか?

まあ、ヨシとしよう;-p
困った時は、その時考えよう。

0 件のコメント: