3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

インターン 2日目(1月30日)

Posted at

ルーティングを極める
読む
重要部分

namespace
namespaceを指定してパスをグループ化することができる。これを使用して、例えば管理用ページ(admin)のパスや置き場所を仕切ることができる。

namespace :page do
  get :privacy_policy
  get :company_information
  get :term_of_use
  get :businessdeal
end

スクリーンショット 0030-01-30 午前5.10.20.png
上のように、名前付きルートとパスとコントローラ#アクションにpageが追加されました。
上は素朴なgetメソッドルーティングでしたが、resourcesルーティングに名前空間を与えることもできます。

namespace :admin do
  resources :users
end

スクリーンショット 0030-01-30 午前5.13.12.png

同じく、名前付きルートとパスとコントローラ#アクションにadminが追加されました。
:moduleオプションを使用して、resourcesに名前空間を与えることもできますが、これは上と少し動作が異なります。

resources :users, module: :admin

# 以下も大事
scope module: :admin do
  resources :users
end

スクリーンショット 0030-01-30 午前5.16.22.png

こちらはコントローラ#アクションにしかadmin名前空間が追加されていません。
ここからわかるように、パスには表したくないが別のディレクトリにまとめたいコントローラがある場合に使用できる。

collectionとmenmber
resourcesを使えば、主要な7つのルーティングが自動的に追加されますが、それ以外のルーティングそのリソースに追加したい場合はmemberまたはcollectionを使用します。
「collection(集合)はidなし、member(個別)はidあり」と覚える。

resources :books do
  collection do
    post :search
    post :remove_multi
  end
  member do
    get :thumbnail
    get :sample_file
  end
end

スクリーンショット 0030-01-30 午前5.19.57.png

見ての通り、いつもの7つのルーティングに加えて4つのルーティングがある。
そしてcollectionで指定した2つにはidはなく、memberで指定した2つにはidがある。
以下のような簡易版もある

resources :books do
  post :search, on: :collection
  get :thumbnail, on: :member
end

何も指定しない時はデフォルトでmember扱い

root

root to: 'pages#top'

オプション指定

onlyとexceptionオプション
主要なアクション(index,show,new,create,edit,update,destroy)を限定できる。

#indexとshowアクションだけを使用する
resources :prefectures, only: [:index, :show]
#destroyアクション以外を使用する
resources :prefectures, except: :destroy

##実際にやる
headerとfooterを作る
bootstrapで作る。
導入方法

Less:「The Dynamic Stylesheet language」の略。Node.js パッケージでインストールすることが多い。
Sass:「Syntactically Awesome Style Sheets」の略。Ruby ベースなので gem でインストールする。
Scss:Sass の表記法の1つ。元々の Sass がブレース {} を使わない記法だったりするのに対し、Scss はブレースを使うのでピュアな CSS っぽい見た目で書ける。

二つのgemを追加する必要があったけれど、gem 'sass-rails'はもともとあったからもともとある方を残した。
色々あって導入は完了。

bootstrapでheaderとfooterを代入する。
renderと_header.html.erb,_footer.html.erbができた。
rails sができない
= > エラー routeのエラーが出てた

root to: 'home/top'

rootの書き方はあってる。
間違いは/#にする必要があり、解決。
他のファイルから呼び出す
 headerでリンク移動ができるようにlink_to(http://railsdoc.com/references/link_to)
link_toにクラスをもたせたい
これにてheaderは完成。

次は、申し込みフォームを作る。
申し込みフォールの処理のフローは以下

1,ControllerのnewメソッドでModelオブジェクトを生成し、インスタンス変数(ex:@user)に値を設定 (@user = User.newでUserはModelオブジェクト)
2,Viewのform_forメソッドでModelオブジェクトのカラムを使用したフォームを作成し、表示する。
3,ユーザーがsubmitすると、params変数に入力したパラメーターがハッシュの形で設定されてControllerに届く。
4,Controllerのcreateメソッドでparams変数でModelオブジェクトを作成する。

新規登録のフロー(詳細)
0,前提
Userテーブルには必要なカラムが存在していて,user.rbカラムが作成されている。

データベースオブジェクトの命名規約
①全般
1,大文字を使用しない
テーブル名、カラム名共に大文字を利用しない。
(DBにより、大文字小文字を区別するもの、しないものがあるから)
2,複数単語の連携がスネークケース
テーブル名、カラム名ともにスネークケースを利用する。
ex)table_name
3,英語表記
基本的にはローマ字ではなく、英語で。
4,略名は利用しない。
× start_dt
○ start_date
②テーブル
1,基本系は~s(複数形)
2,n:nのテーブル
~s(複数形)+ "_" +~s(複数形)
ex)users_categories

カラムの型

app/model/user.rb
class User < ActiveRecord::Base
end

1,ControllerのnewメソッドでModelオブジェクトを生成し、インスタンス変数(ex:@user)に値を設定 (@user = User.newでUserはModelオブジェクト)

app/controllers/users_controller.rb

def new
  @user = User.new
end

end
#@userに空のModelオブジェクトを作成し、インスタンス変数@userに設定
#@userはviewでも使えるインスタンス変数
#Controllerでrenderやredirect_toなどで明示的にレンダリングするviewをしていない場合は、メソッド名のViewファイルがレンダリングされる。(ex:new => new.html.erb)

2,Viewのform_forメソッドでModelオブジェクトのカラムを使用したフォームを作成し、表示する。

app/view/users/new.html.erb
#form_forに @userを渡すことにより、Userテーブルのテキストフィールドやラベルなどのinput要素を簡易に作成することができる
#今回は例として、nameとemailのカラムを持つとする。
<%= form_for @user do |f| %>

  <div class="field">
    <%= f.label :name, "名前" %>
    <%= f.text_field :name %>
  </div>

  <div class="field">
    <%= f.label :email, "メールアドレス" %>
    <%= f.text_field :email %>
  </div>

  <div class="actions">
    <%= f.submit "登録する" %>
  </div>
<% end %>

この記述の例である

<%= f.label :name, "名前" %>
<%= f.text_field :name %>

は以下のようにhtml表記される

<div class="field">
  <label for="user_name">名前</label>
  <input id="user_name" name="user[name]" type="text">
</div>

3,ユーザーがsubmitすると、params変数に入力したパラメーターがハッシュの形で設定されてControllerに届く。

先ほどの、input要素name属性をキーとしてハッシュ形式でparamsに設定される。

params =
{
 user:{# params[:user]で{ name: "鈴木", email: "suzu..." }を取得可能
  name: "鈴木", #params[:user][:name]で値を取得可能
  email: "suzuki@example.com" #params[:user][:email]で値を取得可能
 }
}

4,Controllerのcreateメソッドでparams変数でModelオブジェクトを作成

app/controllers/users_controller.rb
...
def create
 @user = User.new(user_params)
 if @user.save
  # @userはuser_path(@user)に自動変換される
   redict_to @user, notice: "ユーザ登録しました。"
 else
  #ValiationエラーなどでDBに保存できない場合 new.html.erbを再表示
   render 'new'
 end

 private
   #Rails4からStrongParameterと呼ばれる機能が追加
   #セキュリティのため、permitメソッドで許可したパラメータ名しか取得できません。
  def user_params
    params.require(:user).permit(:name, :email)
  end
end
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?