1
2

More than 5 years have passed since last update.

railsのいろいろなこと

Posted at

はじめに

Railsの勉強を初めてしばらく経つが、ここで知識をもう一度おさらいしていこうと思い、この記事をまとめることに至った。
主にここでは見出しと細かな知識をまとめていき、何かもう少し詳しく調べていきたいと思った時は、その部分を新たな記事としてまたまとめ直そうと思う。

contorller, mdoel作成

rails gコマンドを用いてcontrollerを作成する時は、作成したいcontroller名を複数形にして作成する。

rails g controller tweets

同様に、modelを作成する時は、作成したいmodel名を単数形で作成する。

rails g model tweet

controllerは複数、modelは単数形ということに注意。

<%= yield =>

application.html.erbに記述されているyieldだが、これはこの部分をそれぞれのビューファイルに置き換えることを示している。
またapplication.html.erbは全てのページに共通するヘッダー、フッター部分となる。

<%= %> と <% %>

rubyのコードをhtmlでも用いたい時は、<% %>でコードを挟む必要がある。
またそこに<%= %>に変えると、変数を用いてそれを展開してビューに表示することができる。

params

paramsとはRailsにて送られてきた値を受け取るためのメソッドである。基本は、ハッシュオブジェクトと捉えても良い。送られてくる情報は、getのクエリパラメータとpostでformを用いて送信されるようになっている。
受け取り方はparams[:カラム名]で受け取ることができる。

newのビューでformを用いてデータを送信、createのcontrollerでparamsを受け取るのが一般例。その時の呼び出しだが、ストロングパラメータ(permitメソッド等)として設定することで、不要なカラムを取り出すことのないようにしている。

tweet_controller.rb
def create
  Tweet.create(tweet_params)
end

private
def tweet_params
  params_permit(:name, :text)
end

binding.pry

gem pry-railsを取り込むことでbinding.pryを使うことができる。これを挿入した部分において、Railsの処理を止めることができる。処理を止めている間はコンソールと同様に扱うことができるため、変数の値などを確認することができる。exitコマンドで中断していた処理を再開することができる。

gem devise

gemfileにてgem deviseをインストールすることで、ユーザーのログインを管理できるようになる。そのあとに、rails g devise:installコマンドにより必要なファイルの生成を行うことができ、実際にログイン機能を持ったモデルを作成する時はrails g devise userをすることで、devise機能によりログイン機能を持ったuserモデルを作成することができる。

カラムの追加

テーブルにカラムを追加する時は、マイグレーションファイルを作成する必要がある。コマンドはrails g migration AddNicknameToUsers nickname:stringキャメル形式で行う。この場合では、Userテーブルにnicknameカラムをstring型で追加する。
また削除する時は、rails g migration RemoveNicknameFromUsers nickname:stringのコマンドを用いる。

アソシエーション

モデル間の結びつきを表現するための手法。親モデルにはhas_many :[子供モデル名]、こモデルにはbelongs_to :[親モデル名]をつけることにより、モデル間の親子関係の結びつきを表現することができる。
そのほかの条件として、子モデルの方に所属を明示する親モデル名_idというカラムを準備しておく必要がある。
参照方法は直感的に扱うことができるようになり、親モデルのカラム.子モデル名.子モデルのカラム名、のような形で、親コントローラの中でも子モデルのカラムを参照することができるようになる。

includesメソッド

なんとなく使っていたincludesメソッド、もう一度見返したらこれはn+1問題を解決するためのものだった。そもそもn+1問題は、データベースへのSQL文の発行が多くなってしまう問題である(詳しくはまた今度)。
そのためこの問題を解決するために、includes(モデル名)とすることで関連しているレコードも同時に取得することが可能なる。

ネスト

ネストとは、ある記述に入れ子構造でもう一つ記述をすることをいう。色々な面においてこのネストが使われるが、今回はルーティングにおいてのネストに注目したい。
ルーティングでネスト構造を用いて記述した際は、中の入れ子のモデルの情報に外の入れ子の情報を付随して用いることができる。具体的には、paramsの情報として親のネストの情報を利用することもできる。アソシエーション先のレコードのidをparamsに追加しているということ。

最後に

この記事は随時更新して言うつもりです。自分の知識の引き出しを増やしていきたい所存。

1
2
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
1
2