Ruby on Rails 10章序盤

Ruby on Rails 10章序盤をやりました。

●更新ページ
URL→users/1/edit
コントローラに
def edit
user = User.find( params[:id] )
endがあればよい。

●フォームのソース(参考)

<form class=”edit_user” id=”edit_user_1″ action=”/users/1″ accept-charset=”UTF-8″ method=”post”><input name=”utf8″ type=”hidden” value=”✓”><input type=”hidden” name=”_method” value=”patch”><input type=”hidden” name=”authenticity_token” value=”NrIR6GjxnOHTQxXP7RVBor0ePHYkcW0q5vJezW4I5W7gnKRAjuu629WSmS4cvr6wtANtfBKH4ifhxgmR2O9O1w==”>
<label for=”user_name”>名前</label>
<input class=”form-control” type=”text” value=”テスト” name=”user[name]” id=”user_name”>

<label for=”user_email”>メールアドレス</label>
<input class=”form-control” type=”email” value=”test@test.example.com” name=”user[email]” id=”user_email”>

<label for=”user_password”>パスワード</label>
<input class=”form-control” type=”password” name=”user[password]” id=”user_password”>

<label for=”user_password_confirmation”>確認</label>
<input class=”form-control” type=”password” name=”user[password_confirmation]” id=”user_password_confirmation”>

<input type=”submit” name=”commit” value=”Save Changes” class=”btn btn-primary” data-disable-with=”Save Changes”>
</form>

メソッドなどはブラウザ実装によるので、railsがメソッドを識別するのはダミーらしい。

●新規か既存か
user_obj.new_record?

これでどっちなのかが判別できる。

form_for(@user)としたとき、
new_record?の値で、post or patchをきめている。

(railsが)

●リンク先のパス
/users index users_path すべてのユーザーを一覧するページ
/users/1 show user_path(user) 特定のユーザーを表示するページ
/users/new new new_user_path ユーザーを新規作成するページ (ユーザー登録)
/users create users_path ユーザーを作成するアクション
/users/1/edit edit edit_user_path(user) ユーザーを編集するページ
/users/1 update user_path(user) ユーザーを更新するアクション
/users/1 destroy user_path(user) ユーザーを削除するアクション

●target=”_blank”
→windowオブジェクトからリンク元である自ページが参照できてしまう。
rel=’noopener’をアンカータグにつける

●パーシャル(復習)
・呼び出す側のView
<% provide(:button_text, “hogehoge”)
<%= render ‘hoge’ %>

・hoge.html.erb
<%= form_for(@user) do |f| %>
<%= render ‘shared/error_messages’ %>
<%= f.label :name, ‘名前’ %>
<%= f.text_field :name , class:’form-control’%>
<%= f.label :email, ‘メールアドレス’ %>
<%= f.email_field :email, class:’form-control’ %>
<%= f.label :password, ‘パスワード’ %>
<%= f.password_field :password, class:’form-control’ %>
<%= f.label :password_confirmation, “確認” %>
<%= f.password_field :password_confirmation, class:’form-control’ %>
<%= f.submit yield(:button_text), class: “btn btn-primary” %>
<% end %>

●パーシャルの引数
渡す側
<%= render ‘hoge’, {key: value} %>
使う側(名前=value)
<%= f.label :name, :key %>

→いずれみなおし。間違ってるかもしんない。

●バリデーションでnilを許容する
やり方:
validates( :password, allow_nil: true )

ところで、validatesは、
validates( :password, rule1, rule2, rule3 )
のように1メソッド中で一括で指定できるが、

↓のように順次チェック的にべた書きしていると
validates( :password, presence:true )
validates( :password, length:{minimum:6} )

↓このようにかかないといけない。
(必須チェックでもallow_nil。桁数チェックでもallow_nil。って感じ。)
validates( :password, presence:true, allow_nil: true )
validates( :password, length:{minimum:6}, allow_nil: true )

なので、

validates( :password, presence: true, length:{ minimum:6 }, allow_nil: true )
のほうがスマート。

●認可
・before_action
該当するコントローラの各アクション実行前に共通的に実行する。

例:before_action :logged_in_user, only: [:edit, :update]
logged_in_user→コントロール内のメソッド。
onlyで、該当アクションのみ制限できる。

コメントを残す

メールアドレスが公開されることはありません。