seeds.rbとは
初期データを生成してくれるファイルのこと。
このファイルにデータを生成するコードを書いておくだけで、アプリにデータを備えさせることができます。
簡単にテストデータを作ったりできます。
使い方
1.自分が用意したいデータをファイル内でcreateする。
db/seed.rb
通常の場合
User.create(name: "tanaka")
User.create(name: "sato")
配列の場合
users = User.create([{name: "tanaka"}, {name: "sato"}])
大量のテストデータの場合
100.times do |n|
User.create(title: "test{n}人目", content:"test!#{n}回目")
end
2.seedファイルを実行する
$ rails db:seed
おまけ
実際に存在しそうなデータを生成してくるgem(Faker)があるので一応載せておきます。
1.Gemfileに以下を追記
gem 'faker'
こちらも忘れず実行してください。
$ bundle install
2.seeds.rbを以下のように記述する。
db/seed.rb
100.times do |n|
name = Faker::Name.name
email = Faker::Internet.email
content = "test"
User.create(
name: name,
email: email,
content: content
)
end
3.seedファイルを実行する。
$ rails db:seed
※Fakerの使い方一覧は以下の表参照。
種類 役割
Faker::Name.name 名前
Faker::Internet.email メールアドレス
Faker::Address.city 都市の名前
Faker::Food.ingredient 食べ物の名前
paginationとは
Railsには豊富なページネーションメソッドがあります。今回はその中で最もシンプルかつ堅牢なwill_paginateメソッドを使ってみましょう。これを使うためには、Gemfileにwill_paginate gem とbootstrap-will_paginate gemを両方含め、Bootstrapのページネーションスタイルを使ってwill_paginateを構成する必要があります。まずは各gemをGemfileに追加してみましょう
①Gemfileにwill_paginateを追加する
②bundle install
render @**
renderはパーシャルの読み込みだけでなく、@userのような変数を与えると、railsは自動的にUserオブジェクトのコレクションを呼び出し、リストアップしその後、_userのパーシャルにデータを代入し、出力する。
beforeメソッド(controllerで使用)
before_actionメソッドを使用することで、コントローラー内の特定のアクションを行う前に、before_actionメソッドを実施できる。(デフォルトは全アクション、:onlyで特定のアクションを指定できる)
使用例:ユーザー情報の更新、削除など
書き方
before_action :logged_in_user, only: [:index, :edit, :update, :destroy]
Strong Parameters
Strong Parametersを使うことで、必須のパラメータと許可されたパラメータを指定することができます。さらに、上のようにparamsハッシュをまるごと渡すとエラーが発生するので、Railsはデフォルトでマスアサインメントの脆弱性から守られるようになりました。
この場合、paramsハッシュでは:user属性を必須とし、名前、メールアドレス、パスワード、パスワードの確認の属性をそれぞれ許可し、それ以外を許可しないようにしたいと考えています。これを行うには、次のように記述します。
params.require(:user).permit(:name, :email, :password, :password_confirmation)
このコードの戻り値は、許可された属性のみが含まれたparamsのハッシュです(:user属性がない場合はエラーになります)。
これらのパラメータを使いやすくするために、user_paramsという外部メソッドを使うのが慣習になっています。このメソッドは適切に初期化したハッシュを返し、params[:user]の代わりとして使われます。
data:{confirm: }
Railsではデータの削除時などに簡単に確認ダイアログを表示する仕組みが用意されています。
下に示すlink_to メソッドの引数に data: {confirm: 'メッセージ' } のように記述することにより、 リンクやボタンをクリックする際にブラウザに組み込まれている確認ダイアログを表示させることができます。