Note To Self ~One Step At A Time~

AUTHOR
kkawazoe
155 Posts
62 Tags

ページ内検索

rails で中間テーブルをチェックボックス複数選択させて生成する方法

  • Nov 3, 2022
  • POST
環境 ruby: 2.7.6 rails: 5.2.8.1 前提 rails で has_many の ids を使用して中間テーブルの関連付けを行う方法 の構成を参照 実際のコード erb で行うパターンと javascript で行うパターンはそれぞれ以下 ※基本的には erb で行うと思うが、 erb の構成に対して値を受け渡す場合にjavascript のパターンを使用する erb のパターン association を使用して as: :check_boxes オプションを指定する <%= simple_form_for @book do |f| %> <%= f.association :categories, as: :check_boxes %> <%= f.button :submit %> <% end %> javascript のパターン 最終的に生成される params が以下のようになるように組み立てる ["", 1, 3] $('form').append( `<input type="hidden" value="" name="book[category_ids][]" />`, ); book.

rails で has_many の ids を使用して中間テーブルの関連付けを行う方法

  • Nov 1, 2022
  • POST
環境 ruby: 2.7.6 rails: 5.2.8.1 実際のコード [ER 図] ER 図 [model] class Book has_many :book_categories, dependent: :destroy has_many :categories, through: :book_categories end class BookCategory belongs_to :book belongs_to :category end class Category has_many :book_categories has_many :books, through: :book_categories end [controller] category_ids を配列形式で許可する def create @book = Book.save!(book_params) end private def book_params params.require(:book).permit( :title, category_ids: [] ) end

ransack で scope を使用して link_to で表示する方法

  • Nov 1, 2022
  • POST
方法 ransackable_scopes メソッドを使用して実現する 環境 ruby: 2.7.6 rails: 5.2.8.1 実際のコード 例. User モデルの created_at カラムを基準として N 以内に作成されたユーザを取得する [model] # 引数なし scope :within_one_month, -> { where('created_at >=', Time.zone.now - 1.months) } # 引数あり scope :within_days, -> (day) { where('created_at >=', Time.zone.now - (day).days) } def self.ransackable_scopes(_auth_object = nil) %i(within_days within_one_month) end [erb] <%= link_to( "1ヶ月以内に作成されたユーザ一覧", users_path(@q, q: { within_one_month: true }), class: "btn btn-primary mr-5" ) link_to( "7日以内に作成されたユーザ一覧", users_path(@q, q: { within_days: 7 }), class: "btn btn-primary mr-5" ) %> [controller]

rspec で factory bot を使用して複数テストを作成すると同時に関連するクラスを紐づけて動的に生成する方法

  • Oct 30, 2022
  • POST
方法 create_list と send メソッドを使用して実現する 環境 ruby: 2.7.6 rails: 5.2.8.1 rspec 3.7.0 実際のコード user のテストデータを3つ作成 かつ 関連する user_status のテストデータを紐付けおよびカラム status を動的に生成する let(:user_status1) { UserStatus::Active } let(:user_status2) { UserStatus::Locked } let(:user_status3) { UserStatus::InActive } before do create_list(:user, 3).each.with_index(1) do |user, i| create( :user_status, user: user, status: send("user_status#{i}"), ) end end rspec 5.2 以降であれば以下も可能 参考 let(:user_status1) { UserStatus::Active } let(:user_status2) { UserStatus::Locked } let(:user_status3) { UserStatus::InActive } before do create_list(:user, 3) do |user, i| create( :user_status, user: user, status: send("user_status#{i + 1}"), ) end end

CSS テキストを左揃えのまま中央寄せにする方法

  • Sep 14, 2022
  • POST
css でテキストを左揃えのまま中央寄せにする方法を備忘録として残しておく 実際のソースおよび実行結果 中央寄せかつテキストの行頭を揃える

rails で 巨大な csv ファイルをストリーム処理する方法

  • Sep 3, 2022
  • POST
1 GB を超えるような csv ファイルを一度に読み込むとメモリエラーが発生する場合がある さらに処理時間もすごくかかるため、ストリーム処理に変更などして処理の高速化した際の方法を備忘録として残しておく 方法 File#open メソッドと CSV#new メソッドを組み合わせて実現する 環境 ruby: 3.0.4 rails: 6.1.6.1 実際のコード csv ファイルの特定の文字列を置換する処理 前提 header 付の csv ファイル リファクタリング前 class Converter def self.convert # 読み取り専用でファイルを開く read_only_file = File.open("{ファイルパス}" , "r") # 保存用バッファ buffer = read_only_file.read() # バッファの中身を変換 buffer.gsub!({置換対象文字列}, {置換文字列}) # ファイルを書き込みモードで開き直す file = File.open("{ファイルパス}" , "w") # 変更内容を出力する file.write(buffer) # close read_only_file.close() file.close() end end リファクタリング後 require 'csv' require 'fileutils' class Converter def self.

rails で文字列置換を行う際に対応表で置換する方法

  • Sep 3, 2022
  • POST
rails で文字列置換を行う際に対応表で置換する方法を備忘録として残しておく 方法 gsub メソッドに対して、第1引数に正規表現、第2引数に Hash を渡すことで実現する 環境 ruby: 3.0.4 rails: 6.1.6.1 実際のコード # 変換用の対応表 convert_map = { 'a' => 'A', 'b' => 'B', 'd' => 'D' } #=> {"a"=>"A", "b"=>"B", "d"=>"D"} # 以下と同義 # "adcacbd".gsub(/a|b|d/, { 'a' => 'A', 'b' => 'B', 'd' => 'D' }) "adcacbd".gsub(Regexp.new("#{convert_map.keys.join('|')}"), convert_map) #=> "ADcAcBD"

CentOS でファイル内の行数を取得する方法

  • Aug 28, 2022
  • POST
CentOS でファイル内の行数を取得する方法を備忘録として残しておく 方法 wc コマンドの -l オプションを使用する 環境 CentOS: CentOS Linux release 8.4.2105 実際のコード # 該当のファイルが存在するディレクトリに移動して実行 wc -l # 拡張子で対象を絞りたい場合は以下 # 例. 拡張子が「.csv」のファイルの行数を取得 wc -l `find ./ -name '*.csv'`

rails で別名がつけられているカラムを pluck で取得する方法

  • Aug 23, 2022
  • POST
rails で別名がつけられているカラムを pluck で取得する方法を備忘録として残しておく 方法 シンボルでの指定ではなく、文字列で as 句含めて指定する 環境 rails: 6.1.6.1 実際のコード 例. Book と Category クラスの関係が 1 対 多 である場合 # Book クラス class Book < ApplicationRecord has_many :categories end # Category クラス class Category < ApplicationRecord belongs_to :book end # データ準備 book = Book.create!(name: 'サンプル書籍') book.categories << Category.create(name: 'ビジネス') book.categories << Category.create(name: '自己啓発') # 別名を付与したカラムを取得 category_names = Book.joins(:categories) .select(:name, 'categories.name as category_name') .where(id: 1) .pluck('categories.name as category_name') # (1.

PostgreSQL で テーブルのカラム内の特定の文字数を取得する方法

  • Aug 22, 2022
  • POST
PostgreSQL で テーブルのカラム内の特定の文字数を取得する方法を備忘録として残しておく 方法 sum, length, regexp_replace を使用する 環境 PostgreSQL: 13.3 実際のコード regexp_replace 関数で name カラム内の 「仼」、「鶴」を空文字に置換 length 関数で 1 の置換前の文字数および置換後の文字数を取得 sum 関数で 2 で取得したものを計算(置換前文字数 - 置換後文字数) ※coalsesce 関数は null が返却された場合のデフォルト値を設定 select 'ユーザテーブル--名前カラム中の「仼」または「鶴」の件数', coalesce(sum(length(name)-length(regexp_replace(name, '[仼鶴]','','g'))), 0) from users;
  • ««
  • «
  • 8
  • 9
  • 10
  • 11
  • 12
  • »
  • »»
LATESTS
Serverless 構成で lambda ローカルデバッグ用に AWS SAM CLI を使用する
  • May 16, 2025
  • POST
Rails 8 docker を使用している場合に rspec > requests spec で 403 エラーが発生した場合の確認点について
  • May 8, 2025
  • POST
Rails 8 rails new コマンドのオプションについて
  • Apr 14, 2025
  • POST
Cursor と Confluence および Jira との連携方法
  • Apr 3, 2025
  • POST
Rails 8 リリースノートまとめ
  • Mar 19, 2025
  • POST
Rails 7.2 リリースノートまとめ
  • Mar 19, 2025
  • POST
Rails 7.1 リリースノートまとめ
  • Mar 18, 2025
  • POST
Rails 7 リリースノートまとめ
  • Mar 18, 2025
  • POST
Tbls についての Tips
  • Mar 14, 2025
  • POST
Terminal Ghostty の設定方法
  • Jan 7, 2025
  • POST
TAGS
  • ruby-on-rails (41)
  • tool (40)
  • aws (31)
  • 資格 (15)
  • github (8)
  • postgresql (8)
  • amazon-rds (4)
  • vue.js (4)
  • aws-cognito (3)
  • aws-lambda (3)
ABOUT
プライバシーポリシー
  • Mar 1, 2019
  • OTHER
マインドマップ

© Note To Self ~One Step At A Time~

Powered by Hugo.

Robust designed by Daisuke Tsuji.