2021-09-02から1日間の記事一覧

メールのプレビュー

メールのプレビューをブラウザで行う方法。 メイラーの設定 メイラーの設定については以下を参照。 phytoyasu.hatenablog.com letter_opener_web gem 'letter_opener_web'をインストール。 group :development do gem 'letter_opener_web' end % bundle inst…

gem 'config'による定数管理

gem 'config' で、環境ごとに異なる定数を管理する。 設定値をconfigフォルダ以下に一元管理すると、メンテナンスが楽になる。 gem 'config' $ rails g config:install インストールにより、以下のファイルが生成される。 config/initializers/config.rb con…

検索機能

ransackによる検索機能 gem 'ransack' % bundle install 検索結果を一覧表示するためのアクション # person_controller.rb def index @q = Person.ransack(params[:q]) # 送られてきたパラメータをもとにレコードを検索する @people = @q.result(distinct: t…

ページネーション

gem 'kaminari' によるページネーション gem 'kaminari' % bundle install % rails g kaminari:config コントローラ 対象となるページに相当するレコードを取得する。 1ページの件数が20、params[:page] = 3のとき、41~60番目のレコードが取得される def ind…

N+1問題の対応

N+1問題とは 主にインスタンスの配列に対して、ループ処理などによってその一つ一つに関連のあるデータを取得するときに、ループ処理の回数分クエリが走りパフォーマンスが低下すること。 @users = User.all @users.each do |user| puts user.post.content e…

コレクションルーティング(idを伴わないパス)

resources :articles do collection do get :bookmarks end end GET 'boards/bookmarks' というidを伴わないパスを認識し、リクエストをboardsコントローラのbookmarksアクションへルーティングする。

ブックマークを一回限りにするには?

scopeオプションで、一意性チェックの範囲を絞り込む属性を指定する。 class Bookmark < ApplicationRecord belongs_to :user belongs_to :article validates :user_id, uniqueness: { scope: :article_id } end 一つのarticle_idでレコードを絞り込み、その…

i18nにおけるアイテム渡し

アイテム渡しによって翻訳文を動的に変更でき、DRYにすることができる。 # comments_controller.rb def update if @comment.update(comment_params) redirect_to @comment, success: t('defaults.message.updated', item: Comment.model_name.human) else fl…

yieldとcontent_forでページタイトルを動的に変更する

yield ビューを挿入する場所を指定する コンテンツを名前付きのyieldとしてレンダリングするには、content_forメソッドを使用する。 content_for コンテンツを名前付きのyieldブロックとしてレイアウトに挿入する。ビュー内でコンテンツを定義したりレンダリ…

carrierwaveによる画像アップロード機能

画像アップロード インストール gem 'carrierwave' $ bundle install --path vendor/bundle アップローダの生成 $ rails generate uploader Icon アップローダファイル class IconUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick #…

バリデーションエラーメッセージをビューで表示する

エラーメッセージのパーシャル(shared/_error_message.html.erb)にobjectとして@userを渡す <%= render 'shared/error_message', object: @user %> エラーメッセージのパーシャル object.errors.full_messageでエラーメッセージの全文が取得できる。 <% if…

タイムゾーン

config.time_zone アプリケーションのタイムゾーンを設定できる。 Time.currentやゲッターメソッドcreated_at,updated_atなどで取得できる時刻に反映される。 config.active_record.default_timezone DBへの読み書きをする際のタイムゾーンを、UTC(標準時)…

seedデータの作成

fakerをインストール gem 'faker' db/seed.rbの記述 今回はFaker::Artistで実在のアーティスト名を生成。 ほかにもFaker::ColorやFaker::Foodなど汎用性のあるものから、Faker::JapaneseMedia::StudioGhibliとかいうマニアックなものまで。 # 10人のartistと…

デコレータ

デコレータを導入することによって、ビューにロジックを書いたりモデルを肥大化させずに済む。 Helperとの違いは? Helper:モデルに依存しないビューロジックを書く Decorator:モデルに依存したビューロジックを書く インストール gem 'draper' デコレータ…