Rails関連のことを調べてみた2022年02月12日

Rails関連のことを調べてみた2022年02月12日

【Rails,Ruby】ページタイトルを三項演算子でシンプルに

#三項演算子

下記のように「?」と「:」を使って、if, else, end のくだりを一行で書ける書き方。

* if文による書き方

“`ruby
if name==”Taro”
“Yes, I am Taro”
else
“No, I am not #{name}”
end
“`

* 三項演算子による書き方

“`ruby
name==”Taro” ? “Yes, I am Taro” : “No, I am not #{name}”
“`
#ページタイトルヘルパーへの応用

この書き方を利用して、ページタイトルヘルパーもシンプルに書ける。
(page_titleはprovideでページごとに与えてください)

* 変更前

“`ruby:application_helper.rb
module ApplicationHelper
BASE_TITLE = “HOGE”
BASE_TITLE.freeze
def full_title(page_title)
if page_title.empty?
BASE_TITLE

元記事を表示

Railsで日本語ヘッダのCSVを読み込む

# Railsで日本語ヘッダを持つCSVファイルを読み込む
想定: ユーザにCSVをアップロードしてもらい処理を行う。その際のヘッダー名に日本語を使いたい場合の書き方
結論: i18_nを使ってマッピングします。

## サンプルCSV
“`
名前,かな
テスト,てすと
太郎,たろう
“`

## いまいちな書き方
“`
CSV.foreach(“user.csv”, headers: true) { |row| puts row[‘名前’] }
テスト
太郎
“`
いまいちな理由

– headerを日本語以外に変更する場合にコード修正が必要になる
– インスタンスを作成する場合のコードが冗長になる

“`
User.new({name: row[‘名前’], kana: row[‘かな’]})
“`
2カラムぐらいなら問題ないですが、増えてくると可読性が下がります。

## おすすめの書き方
`config/locales/models/user.ja.yml` を作成してマッピングを行います。

### マッピング用ymlファイル
“`
ja:
activer

元記事を表示

【未経験】【エンジニア転職】Rails, React, AWS, Docker を使用した SPA サービス作成までの独学方法

# 自己紹介
おがわと申します。
現在(2022年2月)、自社開発の企業を目標に転職活動をしています。
私は小学校教員からエンジニア転職を目指して独学を継続しています。
webのことは全くわからない状態から学習を始めました。
最初は「発達障害をもつ子どもを支援するサービス」を自分で作れないだろうか、というところから学習がスタートしました。
学習をしていくうちに、「作るのが楽しい!もっとやってみたい。エンジニアになって、技術で社会に貢献したい」という思いに変化していきました。
自分でも驚いていますが、「やってみたい、チャレンジしてみたい」と思えることに出会えました。

忙しい中でも計画的に時間をかけて学習しました。これは効率性を考えるとおすすめできる学習方法ではありませんが、(継続できれば)誰でも再現可能であるともいえるかと思います。
仕事が忙しいからエンジニアに転職をすることを諦めている方の参考になればうれしいです。

# 作成したサービスについて
## [「困り感」のある子どもを支援するサービス Tech Teach!](https://www.tech-teach.net)
![名

元記事を表示

Railsのルーティング好きなURLにしたいとき

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111652/660da907-4a7d-8265-4195-c7a0d21b883f.png)

## Railsのルーティングってなんかな〜
Railsを学びはじめたときにルーティングでresoucesを使うと複数形になったり
なんだかRailsって思い通りのURLにすることできないのかな〜って思ってました。

そんな初学者のかたに朗報です。

`scopeメソッド`を使うことで、`resources`によって生成されるデフォルトのパス名を変更できます。

“`ruby
scope do
resources :this_sites , path: ‘kono_site’
end
“`

[![Image from Gyazo](https://i.gyazo.com/79120f86164340cc5531a0fc4ca2bc49.png)](https://gyazo.com/7

元記事を表示

migrationファイルのnull:falseとは

## はじめに
Qiitaへの初投稿になります。文章を作るのが苦手なので、その練習と備忘録もかねての投稿です。
学習していて気になったので調べてみました。
# 意味
migrationファイルのnull:falseとは指定したカラムがデータベースに空の状態で保存されることを防ぐものです。

“`ruby
class CreatePosts < ActiveRecord::Migration[6.0] def change create_table :posts do |t| t.string :name, null: false t.text :text, null: false t.timestamps end end end ``` 上記の場合nameカラム、textカラムを空で保存できない設定になります。 # presence: true 似ているものでmodelにバリデーションとして記述するpresence: trueがあります。 意味は指定したカラムが空の状態で保存されることを防ぐ。 ```ru

元記事を表示

Railsで作った日本、台湾華語対応のブログ構成

# なぜまとめるのか
Railsオンリーでつくったブログ([日台one!](https://nittai-one.com)というブログ名)のフロントをこれからNext.jsに置き換えようと考えています。
そのため、現状の仕様が置き換わってしまう前に現状の姿形を記録に残したいと思いました。

[github リポジトリ](https://github.com/atamakonkurii/blog_JT)

ちなみに、僕は日本人、彼女が台湾人でブログの記事作成は二人でやってます。
お互いの母国語で記事を書いて、記事を投稿した瞬間にAmazon translateで翻訳し、DBに保存する仕様です。

# 技術スタック

| カテゴリ | 要素 |
| —- | —- |
| 言語/フレームワーク | Ruby / Rails / tailwind css |
| ミドルウェア | MySQL |
| クラウドサービス | AWS EC2 / CloudFront / AmazonTranslate|

未経験入社した段階ではRails歴1週間にも関わらず、Rail

元記事を表示

サブドメインがついたURLにlink_toで指定する方法

サブドメインが付いているURLをlink_toで指定する方法です。
業務の中で、サブドメインの異なるページからlink_toを用いて画面遷移する必要があったのでメモとして。

サブドメインが同じページからの遷移(通常)

“`ruby
= link_to “タスク一覧”, tasks_path # 「tasks_path」の指定の仕方でOK
“`

サブドメインの異なるページからの遷移

“`ruby
= link_to “タスク一覧”, tasks_url(subdomain: ‘xxx’) # 「tasks_path」の指定では遷移できないので「tasks_url」と記述しなければいけない
“`

IDを伴うURLへの遷移(インスタンス変数を渡す場合)

“`ruby
= link_to “タスク詳細”, task_url(@task, subdmain: ‘xxx’) # (インスタンス変数, subdomain: ‘xxx’)の形をとる
“`

元記事を表示

【RailsAPI】devise_token_auth にてゲストログイン機能を実装したい!

個人開発にて実装した、devise_token_authを使用したゲストログイン機能のmemoになります。

# 課題

– ゲストログイン機能を実装したい

# 前提

– devise_token_auth 導入済

# 1.Rails

## 1 ) ルーティングの実装

今回、ゲストログイン処理は `sessions_controller.rb`に追加しました。

“`ruby: config/routes.rb
Rails.application.routes.draw do

namespace :v1 do
mount_devise_token_auth_for “User”, at: “auth”, controllers: {
registrations: “v1/auth/registrations”,
sessions: “v1/auth/sessions”,
confirmations: “v1/auth/confirmations”,
passwords: “v1/auth/passwords”

元記事を表示

rails d modelは要注意

開発中のアプリケーションでいらないモデルを削除しようとなったときに、rails d modelをしてしまい(もちろんpushはしてない)「そのやり方は100%ダメだ」と言われることがあったので自戒の念を込めて記事を作成します。

## rails newで実験用アプリを用意する

“`markdown
rails new migration_experiment
cd migration_experiment
rails db:create
“`

## User modelを作成する

“`markdown
rails g model User name:text
rails db:migrate
“`

## Task modelを作成する

“`markdown
rails g model Task name:text description:text
rails db:migration
“`

## User modelにemailカラムを追加する

アプリを作成中User modelに新しくemailカラムを追加することになったと仮定してemaiカラムを追加する

元記事を表示

ワンライナーとrake task

ワンライナーとは一行で書かれたコードや、一行で書かれたコマンドの組み合わせのことです。

例えばif分などを使わず、三項演算子で書くなど一行で収まるようにしたコードや、

rake db:migrate など一行で書かれたコマンド等のことを言います。

以下ではRails のrakeタスクに自分が行いたいタスクを登録しておきconsoleからコマンドを叩くだけで実行する流れを説明します。

## Rakefileを作成する

railsではrakeコマンドを実行した場合、Rakefileと言う名前で登録されているファイルを参照しにいきます。(-fオプションをつけ明示的に違う名前のファイルを参照させることもできます。)

“`ruby
mkdir test
cd test
touch Rakefile
“`

## Rakefileの編集

Rakefaileの中では「desc」「task」と言う記述が出てきます。

「desc」にはタスクの一覧(次の項目で説明)を表示させた際、タスクがどのような役割を持っているかを説明する文を記述します。

「task」はrake taskで実際に

元記事を表示

RailsEngineを利用した、社内Gem(ライブラリ)開発方法

# RailsEngineを利用して、社内Gem開発方法

現在の業務委託先で受託開発をしています。

受託開発で請け負うアプリは似通ったアプリを開発するケースが多いです。

以前は受託開発案件はフルスクラッチで開発していたのですが、似通った共通の機能はRailsEngine※1で機能開発、共通化して社内Gem(ライブラリ)にすることで開発スピードを上げることになりました。

考え方としてはDHHのDRYと同じです。

コア機能部分を共通化してコンテンツの投入だけで簡単にアプリを開発できるようにしたイメージです。

※1, RailsEngineとはホストとなるRailsアプリケーションに機能を提供するミニチュア版のRailsアプリケーションです。RailsEngineで作成されたミニチュアアプリケーションをホストアプリケーションにインストールするだけでホストアプリケーションにコア機能を拡張させることが可能になります。

## RailsEngine(社内gem)の作り方

Rails Engineを作成するには、`rails plugin new < engine_name > —

元記事を表示

[Rails]日本語化する[rails-i18n]

# エラーメッセージとかを日本語化する

## 手順
– GemFileに追加する
– bundle installする
– 設定ファイルを更新
– ymlファイルを配置
– 完了

## GemFileに追加する

使用したいライブラリをGemFileに追加する。

“` rb:Gemfile
gem ‘rails-i18n’ # 日本語化できるようにする
“`

## bundle installする

GemFileに追加したので、bundle installする。

“`zsh:ターミナル
// bundle install(Docker使用時)
% docker-compose exec web bundle install

// bundle install したのでDockerをビルドする
% docker-compose build
“`

## 設定ファイルを更新
config/application.rbは、Rails自体の設定ファイルらしい。([Railsガイド参照](https://railsguides.jp/configuring.html))

元記事を表示

【Rails】erbファイルのコメントアウト方法

# はじめに
プログラミング初学者の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。

railsの`.html.erb`形式のファイルのコメントアウト方法の共有です。

# 方法
**<%の直後に`#`を付ける。** ↓こんな感じです。 `<% コード %>`なら`<%# コード %>`
`<%= コード %>`なら`<%#= コード %>`

# おわりに
お読みいただきありがとうございました。
学習中の方、一緒に頑張っていきましょう〜?

# 参考
http://rails.takayukikoyama.com/erb/erb-comment/

元記事を表示

Railsのassert_templateとassert_selectの使い方

#はじめに
Railsチュートリアルを進めている中でassert_templateとassert_selectの二つのメソッドについて一旦自分なりにまとめておきたいので記事にします。

#assert_templateメソッドについて

レスポンスが正しいテンプレートとレイアウトを描画していることを検証する。

/users/new.html.erbが描画されているかどうかを検証する

“`rb
assert_template ‘users/new’
“`
assert_templateについてまだあるようなのですが現時点では理解しずらいと感じたため今後追記します。

#assert_selectメソッドについて
アクション実行の結果として描写されるHTMLの内容を検証する。
また、HTML要素内にキーが存在することを主張することで、 リクエストに対するレスポンスとなるビューの内容をテストする事が出来る。

#####assert_selectには2つの書式がある。

1. assert_select(セレクタ, [条件], [メッセージ])という書式は、セレクタで指

元記事を表示

selectメソッドとそれに関するメソッドの解説

「collectメソッドと同じメソッドを選べ」という問題は頻出なので、この際にまとめようとおもいます

## selectメソッド
selectメソッドは、調べたブロックが真であった場合、その要素を返すメソッドです。
真であるものがなかったら、空の配列が返ってきます
“`
(1..10).select {|i| i % 2 == 0 }
=> [2, 4, 6, 8, 10]

[3, 5, 7, 9].select {|i| i % 2 == 0 }
=> []
“`
### 似てるけど、違うメソッド
#### rejectメソッド
rejectメソッドは、調べたブロックの中で、偽であった要素を返すメソッドです。
偽であるものがなかったら、空の配列が返ってきます
“`
(1..10).reject { |i| i % 2 == 0 }
=> [1, 3, 5, 7, 9]

[2, 4, 6].reject { |i| i % 2 == 0 }
=> []
“`

#### grepメソッド
条件に一致した要素を配列で返します。条件に一致した要素がなかった場合、空の配列が返っ

元記事を表示

Rails 7でテーブルカラムの型不一致による外部キー追加エラーが発生した場合の解決方法

## はじめに

ローカル環境で `db:migrate` を実行したところ、突然以下のエラーが発生しました :thinking:

“`
Column `application_id` on table `oauth_access_grants` does not match column `id` on `oauth_applications`, which has type `bigint(20)`. To resolve this issue, change the type of the `application_id` column on `oauth_access_grants` to be :bigint. (For example `t.bigint :application_id`).
Original message: Mysql2::Error: Cannot add foreign key constraint
“`

#### 日本語訳

“`
テーブル `oauth_access_grants` の `application_id` カラムは `o

元記事を表示

Rails:ローカルでのタスクとHerokuの環境設定やDB操作など

## ローカル環境
コンソールの準備

“`:terminal
$ rails c
“`
タスクの読み込み
これで `schedular.rake` のタスクを利用できる

“`:terminal
$ Rails.application.load_tasks
“`
タスクの実行
“`:terminal
$ Rake::Task[‘タスク名’].execute
“`

## Heroku環境
ログ出力

“`:terminal
$ heroku logs -t
“`

環境変数の設定

“`:terminal
$ heroku config:set キー=”値”
“`

環境変数の確認

“`:terminal
$ heroku config
“`

データベースの情報取得

“`:terminal
$ heroku pg:credentials:url –app アプリ名
“`

データベースの操作

“`:terminal
$ heroku pg:psql -c SDL文
例) heroku pg:psql -c “select * from user

元記事を表示

DockerでRails7プロジェクト作成する方法 Rails7 + Mysql + esbuild + tailwind + pry-rails(デバッグツール)

# Dockerfile作成

まずはruby3とnodejsを使えるようにする

“`
FROM ruby:3.0

ENV APP /app
RUN mkdir -p $APP && \
apt-get update -y && \
apt-get install default-mysql-client nodejs npm -y && \
npm uninstall yarn -g && \
npm install yarn -g -y
COPY . $APP/

WORKDIR $APP
“`

# docker-compose.yml作成

“`docker-compose.yml
version: ‘3’
services:
app:
restart: always
build:
context: .
volumes:
– .:/app
“`

# イメージビルド実行

“`
docker-compose build
“`

# イメージビルドの確認

“`
docker i

元記事を表示

【pluckの使い方】複数のデータがあり絞り込みが出来ない場合

●状況
DBに大量にデータのあるテーブルA、テーブルB、テーブルCが存在する

①テーブルBはテーブルAのカラム1と一致するデータを検索
②テーブルCは、上記で絞り込んだテーブルBのカラム2と一致するデータを検索

“`ruby:model
テーブルA.each do |sample|
hoge = テーブルB.where(カラム1: sample.カラム1)
hoge2 = テーブルC.where(カラム2: hoge.カラム2)

〜省略〜

end
“`

上記を実行すると、「underfind method カラム2 for 〜」とエラーが発生する。

●解決策
テーブルCが複数のデータが必要な場合、
一度hogeの時点でカラム2の配列情報にして渡す必要がある。

現状の内容は、
hogeの内容を見ると下記のように「ActiveRecord::Relation」型となっている。

“`
#=>,
#

元記事を表示

FontAwesome6(Pro)をimportmapなRails7に組み込む

FontAwesome6がリリースされました。これをRails7 with importmap に組み込もうとしたところ、いくつかの知識が必要だったので共有します。それぞれを知っていれば特に難しい話ではないのですが、どなたかの役に立てばと思います。

Rails7ではwebpackerがなくなり、importmapで管理する必要があります。

webpackerにFontawesome Proを組み込むには、.npmrcに認証情報を書くなどして対応をする必要がありましたが、importmapではこのやり方が使えません。

ちょっとググっても方法が見つからなかったのですが、下記のようにすれば使えました。

# FontAwesome Pro Kit URLの取得

FontAwesomeのサイトに行き、Kitと呼ばれるツールを使い、FontAwesomeをサーブするURLを作る。
https://fontawesome.com/docs/web/setup/use-kit
FontAwesome 5以降はCDNではなく、このKitを使ってサーブするのを推奨しているようです。

# c

元記事を表示

OTHERカテゴリの最新記事