zumi-n 未経験からエンジニア転身日記

29歳、文系、未経験、営業がエンジニア目指してるzumi-nのプログラミングに関する諸々発信ブログ

【三日目】ChatSpaceグループ機能のルーティング設定、ビュー設定

グループ機能のルーティング設定

 

そもそも、「ルーティングとは?」

ブラウザから届いたリクエストに対して、コントローラで定義したアクションを結びつける機能です。

 

resourcesを使えば、一括で複数のHTTPメソッドを設定できるため、大変便利です。

 

$ Rails.application.routes.draw do
root 'messages#index'
devise_for :users
resources :users, only: [:edit, :update]
resources :groups, only: [:new, :create, :edit, :update] do
resources :messages, only: [:index, :create]
end
end

 

上記の通り、groupsのルーティングを設定。

ここで考えないといけないのが、messageにはmessage先が存在しています。

今回の場合だと、message先のグループがなければ、どのgroupに対してのmessageなのかわからなくなります。

messageを投稿する際、どのgroupへのmessageなのかパスから判断するようにしたいので、ネストという方法を使います。

?ネストとは?

入れ子構造とも呼ばれ、ある記述の中に入れ子構造で別の記述をする方法です。

ルーティングだと、あるコントローラへのルーティングの記述の中に、別のコントローラへのルーティングを記述することを指します。

赤字部分がネストになっております。

 

collection_check_boxes

$ = form_for @group do |f| 
〜省略〜
= f.collection_check_boxes :user_ids, User.all, :id, :name

:user_idsは更新対象のオブジェクト、つまり@groupが持つメソッド。チェックボックスの各チェックにIDが関連付けられます。createアクションを実行する時には、ストロングパラメータの設定が必要です。

:idは表示させるそれぞれのvalueの内容を表し、:nameは表示させるtextを示します。

続いて、ストロングパラメータを編集していきます。いまのままだとparamsのpermitはfalseとなるので以下をコントローラに記述します。

 

$  private
def group_params
params.require(:group).permit(:name, { :user_ids => [] })

 

 

errors_full_message

Railsのモデルにおいて、バリデーションエラーが発生した場合、errors.full_messagesメソッドを利用することで、発生した全てのエラーメッセージを配列で取得することができます。

@group.errors.full_messagesの配列に対し、eachメソッドを用いることで、エラーメッセージを1つずつ取り出しています。

$ .chat-group-form__errors
%h2= "#{@group.errors.full_messages.count}件のエラーが発生しました。"
%ul
- @group.errors.full_messages.each do |message|
%li= message

 

今日はここまで。