🐕🦺
管理者側:会員機能
ポートフォリオで使うだろうなと思ったので、復習。
今回、名前を"last_name" "first_name"に分割していて、
full_nameでモデルに定義したら、使えるみたいだったけど、
ちょっと余計なことはあんまりしたくなかったので、あえてそのままにした。
- 会員一覧画面(管理者)
- 会員詳細画面(管理側)
- 会員詳細画面
ルーティング
config/routes_rb
:
namespace :admin do
resources :customers, only: [:index, :show, :edit, :update]
end
:
コントローラー
他のコードは自分のcloud9で確認。
"update"のストロングパラメーターだけ確認のため。
def customer_params
params.require(:customer).permit(:last_name, :first_name, :last_name_kana, :first_name_kana, :post_code, :address, :phone_number, :email, :is_active)
end
最後のis_active
が会員ステータスのカラム
ビュー(会員一覧)
admin/customers/index.html.erb
<td>
<% if customer.is_active == false %>
<strong class="text-secondary">退会済</strong>
<% else %>
<strong class="text-success">有効</strong>
<% end %>
<% end %>
ビュー(会員詳細)
admin/customers/show.html.erb
:
<p class="my-3"><strong>会員ステータス</strong><%= @customer.is_active ? 'green' : 'gray' %>;"><%= @customer.is_active ? '有効' : '退会済' %></span></p>
:
@customer = Customer.find(params[:id])
で定義
is_active
はカラムで指定したもの
"有効" = green
"退会" = gray
ビュー(会員編集ページ)
admin/customers/edit.html.erb
<td class="custom-control custom-radio custom-control-inline">
<%= f.radio_button :is_active, true, checked: @customer.is_active == true, class: 'custom-control-input', id: 'status-active' %>
<%= f.label :is_active, '有効', class: 'custom-control-label', for: 'status-active' %>
</td>
<td class="custom-control custom-radio custom-control-inline">
<%= f.radio_button :is_active, false, checked: @customer.is_active == false, class: 'custom-control-input', id: 'status-deleted' %>
<%= f.label :is_active, '退会済', class: 'custom-control-label', for: 'status-deleted' %>
</td>
<%= f.radio_button :is_active,true... %>
is_activeに対するラジオボタンを作ってくれる。
checked: @customer.is_active == true
is_active属性が"true"の場合、このラジオボタンがチェックされるように設定している。
class: '@custom-control-input'
bootstrapのカスタムコントロールクラスを適用してる。
id: 'status-active'
ラジオボタンのid。次に記載しているlabelと関連づけるために使う。
<%= f.label :is_active, '有効'... %>
ラジオボタンに対応するラベルを作る。
for: 'status-active'
関連づけられるラジオボタンのid。
私はこの時に思った。
モデルに定義した方が、楽だったのでは...
参考にさせていただきました。(モデルに定義して、ビューで呼び出すやり方)
Discussion