Rails関連のことを調べてみた2020年07月30日

Rails関連のことを調べてみた2020年07月30日

Railsのcredentials.yml.encとmaster.keyについて

Railsの秘匿情報管理用のファイルについて

## credentials.yml.enc

・アプリケーション内で使うキー情報を書いておく
・内容は暗号化されている状態

中身を見る/編集するにはターミナルでエディタを指定して開く必要がある。
`EDITOR=“vi” bin/rails credentials:edit`

## master.key
・credentials.yml.encの暗号化復号化に使う鍵(文字列)。
・バージョン管理に含まれていない(デフォルトで.gitignoreに指定されている)

元記事を表示

【Rails】i18nによる日本語化

# はじめに
– Railsのデフォルト言語の日本語化(2パターン)
– 多言語のymlファイルを導入(2パターン)
– `config/locales`で階層的に多言語ファイルの管理

– 筆者のスペック
– Rails学習歴:4ヶ月
– 条件
– Rails 6.0.3.2
– Ruby 2.6.6

そのため間違いなどがある可能性があるので**鵜呑み厳禁!**

# Railsのデフォルト言語の日本語化(2パターン)
どちらか片方の設定で日本語の言語設定は完了します。
##1. `config/application.rb`に設定情報を追加
– `config/application.rb`に`config.i18n.default_locale = :ja`を記入することで日本語を利用できます。
– `:ja`の部分を他をローケルキーに変えることで他の言語に設定することもできます。

“`ruby:config/application.rb
module App
class Application < Rails::Application ...

元記事を表示

RailsプロジェクトのRubyバージョンを変更する

# はじめに
Railsの既に作成済みのプロジェクトのRubyバージョンが誤っており、Rubyを再度インストールしたが途中エラーが発生したので、備忘録として残しておきます。

今回は、プロジェクトのバージョンを「2.6.3」→「2.5.3」にバージョン変更しました。
もし「間違っている」とか「もっと簡単にできる」とかあれば、ご指摘いただけますと助かります。:bow_tone1:

# 環境
– macOS Catalina 10.15.6(19G73)
– Rails 5.2.4.3
– Ruby 2.6.3 (※変更前)
– Ruby 2.5.3 (※変更後)

## Rubyのバージョンを確認する

“`terminal:
$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
“`

バージョンが2.6.3であることを確認。

## Rubyをインストールする

“`terminal:
$ rvm install 2.5.3
“`

インストールが完了するまで待ちます。

## RVMのRu

元記事を表示

【備忘録】add_indexでrollbackエラー

# 現象
データベースのrollbackをしようとしたら、下記のエラーが発生。

##### 実行処理
“`
rails db:rollback
“`

##### エラー
“`
== 20200726224558 DeviseCreateUsers: reverting ================================
— remove_index(:users, {:column=>:reset_password_token})
rails aborted!
StandardError: An error has occurred, all later migrations canceled:
“`

# 解決方法
db/migrate/devise_create_users.rbにある以下の表記をコメントアウトした。

##### 変更前
“`ruby
add_index :users, :name, unique: true
add_index :users, :email,

元記事を表示

resourcesとresourceの違いについてまとめてみた

Railsで何らかのリソースに対するCRUD処理を行うためのルーティングを生成する方法として、resourcesメソッドとresourceメソッドがあるので、今回はその違いについてまとめてみました。

## resourcesとは
resourcesメソッドは、コントローラーの7つのアクション(index、show、new、create、edit、update、destroy)をひとまとめにしたメソッドで、複数のリソースに対するCRUD処理を行うためのルーティングを生成します。

“`:config/routes.rb
Rails.application.routes.draw do
resources :games
end

#リソース名が複数形
“`
上記のように記載すると、7つのアクション(index、show、new、create、edit、update、destroy)全てを設定したことと同じになります。
確認のため、ターミナルにて`rails routes`コマンドを入力してみると、以下のルーティングが生成されています。

“`:ターミナル
Prefix Ve

元記事を表示

複数モデルにデータを保存したい

某メルカリのコピーサイトを作成中。
商品の画像登録にて、複数の画像登録となるとカラムが増えて美しくないので
別モデルでimageテーブルを作成することに

#fields_for
>form_for内で異なるモデルを編集できるようになる。

例:Productモデルに紐付くImageモデル

これを使うとform_withとかで別モデルに保存とかできるようになるっぽい
アソシエーションとかで紐づいてることが前提

#Model
product(商品)とimageは1対多
`accepts_nested_attributes_for` で一緒に保存したいモデルを指定

“`product.rb
class Product < ApplicationRecord has_many :images accepts_nested_attributes_for :images end ```
imageとproduct(商品)は多対一となってます
複数保存する場合は `mount_uploaders` と複数形にする必要があるので注意

“`image.rb
class

元記事を表示

思わぬ事故防止!開発時やテスト時に使用するメアドのドメインは example.com に統一しよう

## はじめに

Webアプリケーションの開発時やテスト時にはテスト用のユーザーを作成するために適当なメールアドレスとパスワードを登録することが多いと思います。

このとき、みなさんはこんなふうにデタラメなドメインをメアドに使ってないでしょうか?

“`
hoge@hoge.com
test@testmail.com
aaaa@bbb.com
etc…
“`

「こんなデタラメなドメイン、あるわけないやろ!」と思うかもしれませんが、自分はデタラメに付けたつもりでも意外とかなりの高確率でそのドメインは実在します。

実際、上の例で挙げたドメインをブラウザに入力すると、いずれも何かしらページが表示されます。
つまり、そのドメインは現在誰かが使っているということがわかります。

Hoge Lumber Company


Screen Shot 2020-07-29 at 15.15.59.pngRails 5 cloud9で誤って作成したマイグレーションファイルを削除する方法

記事の趣旨 ※あくまで個人で開発されている方を対象としています

削除したマイグレーションファイルが生きている
編集してマイグレーションファイルを作成しなおした

対処

![299b83e2ab2fec0c25f32edba537db10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682652/1cce7ad4-71ab-6e8e-9af0-431e8ea62b20.png)

どうしよう。。。。強行手段

1.$ rails db:migrate:status

![a51f3909b9dfe0d66a0e5c910853ba46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682652/1d09f670-b35e-1eac-d235-3986ff63f0ef.png)

1.モデルに作成されたファイルを削除しましょう。(例です)
 
(例)complete.rb  削除

2.不要なマイグレーションファイル

元記事を表示

Effective Rubyを読んで勉強になったこと

## はじめに

Effective Rubyを私が読んで勉強になったことを書いてます。

本書を読んだのは2回目ですが、1回目は何がどう役立つのか全くわかりませんでした。
2回目の今回もいまだに「これって一体どういった場面で効果的なの?」、「そもそも何いってんのこれ?」って部分は多数というかそっちの方が多い気もしますが、以前より「なるほど!」と思った部分があったので、「なんかコーディング力上がってない気がする」って悶々としている人は読んでみると発見があるかもしれません。

本全体の内容を紹介するものではなく
RoRを書いていて、「あ〜こう書けば良かったんだ!」と自分のアンテナに引っかかったところだけを書いていくので、本全体の内容を知りたい方は以下の記事など参照すると良いと思います。
https://qiita.com/fujigaki/items/9d64fa49efcbe7017d8c

## 勉強になったこと

### 項目2 オブジェクトを扱うときにはnilかもしれないことを忘れないようにしよう

“`ruby
undefined method ‘XXXX’ for nil

元記事を表示

Rails Active Storage ファイルのパスを取得する方法

## 投稿した理由
divタグのstyle属性の値background-imageを使う際にURLが必要になったから

## やり方
rails_blob_pathを使う(has_one_attached :image)

“`show.html.erb

[Rails] マイグレーションファイルの新規作成、書き方

マイグレーションファイルの新規作成コマンド
`rails g migration `

例えば、usersテーブルにカラムを追加、削除するマイグレーションファイルを作成するなら下記のように書く。
`rails g migration add_remove_column_to_users`

マイグレーションファイルの中には下記のように書く。

“`.rb
def change
# usesテーブルにbirthdayカラムを追加
add_column :users, :birthday, :string
# usesテーブルにageカラムを削除
remove_column :users, :age, :string

end
“`

最後に、
`rails g db:migrate`
をすればマイグレーションファイルがDBに反映されます。

元記事を表示

Rails 複数カラムの追加

##やり方

“`:ターミナル
$ rails g migration AddColumnToUsers
“`

“`ruby:マイグレーションファイル
class AddColumnToUsers < ActiveRecord::Migration[5.2] def change add_column :users, :family_name, :string add_column :users, :first_name, :string add_column :users, :family_name_kana, :string add_column :users, :first_name_kana, :string end end ```

元記事を表示

Ruby on Railsの基本

#プログラミングの勉強日記
2020年7月12日 Progate Lv.181
Ruby on RailsⅠ
 Ruby on RailsはWebアプリケーション開発のフレームワーク。フレームワークを使うと開発に必要な作業を減らせる。

#Railsアプリケーションの準備
 `rails new アプリケーション名`のコマンドでターミナルを実行。コマンドを実行することで、アプリケーション名と同じ名前のフォルダが作成され、その中の開発に必要なフォルダが用意される。

“`:ターミナル
rails new tweet_app
“`

0712.png
 
#サーバーの起動
 開発中のアプリケーションをブラウザで表示するためにはサーバーを起動させる必要がある。サーバーの起動は`rails server`でコマンドを実

元記事を表示

Ruby on Railsでデータベースを扱う

#プログラミングの勉強日記
2020年7月13日 Progate Lv.186
Ruby on RailsⅡ

#データベースとは
 テキストや数値などのデータを保存するためのツール。データベースは表でデータを管理している。表のことをテーブル、縦の列のことをカラム、横の列のことをレコードという。必要に応じて複数のテーブルを作成できる。

#データベースの用意
 マイグレーションファイルと呼ばれるデータベースに変更を指示するためのファイルを作成する。`rails g model モデル名 カラム名:型`で作成できる。モデル名は必ず最初を大文字にして、単数形にする。なので、postsテーブルを作成するが、この場合単数形にする。モデルについては下で記述する。
 マイグレーションファイルは`db/migrate`フォルダの下に作成される。

“`:ターミナル
$ rails generat

元記事を表示

Ruby on Railsのページの作成

#プログラミングの勉強日記
2020年7月14日 Progate Lv.196
Ruby on RailsⅢ

#find_byメソッド
 find_byメソッドはある条件に合致するデータを取得できる。`モデル名.find_by(カラム名: 値)`とすることで、その値を持ったデータをデータベースから取得できる。今回は特定のidの投稿を取得するために使える。

“`terminal:ターミナル
$ rails console
//idが3の投稿データを取得できる
> post=Post.find_by(id:3)
> post.content
=> “Rails勉強中”
“`

#URLにidを含める
 ルーティングのURL部分に`:`を用いて`posts/:id`と指定することで`posts/1`でも`posts/2`でもshowアクションにいくようにできる。

“`ruby:routes.rb
get “posts/index” => “posts#index”
get “posts/:id” => “posts#show”
“`
 `p

投稿の編集と削除機能(Ruby on Rails)

#プログラミングの勉強日記
2020年7月15日 Progate Lv.196
Ruby on RailsⅣ

#投稿の編集
 投稿を編集するには、①編集したい投稿を取得、②その投稿の`content`の値を上書き、③データベースに保存する。`post.content=”新しい値”`で投稿の`content`を上書きできる。

“`terminal:ターミナル
$ rails console
> post=Post.find_by(id:1)
> post.content=”Rails”
> post.save
“`
 投稿データを編集してデータベースに保存すると、`updated_at`カラムの値がデータを更新したときの時刻に更新される。

#投稿の削除
 投稿を削除するには、削除したい投稿を取得し、その投稿に対して`destroy`メソッドを用いる。

“`terminal:ターミナル
$ rails console
> post=Post.find_by(id:2)
> post.destroy
“`

#投稿編集ページ
 どの投稿の編集ページか判別するために投稿編集ペー

投稿の制限(Ruby on Rails)

#プログラミングの勉強日記
2020年7月16日 Progate Lv.205
Ruby on RailsⅤ, Ⅵ

#バリデーション
 不正なデータがデータベースに保存されないようにデータをチェックするシステムをバリデーションという。バリデーションに引っかかった場合(不正なデータの場合)にはデータベースに保存されない。
 バリデーションはモデルで設定する。`validates`を用いてカルム名と内容を指定する。`{presence: true}`を用いることでそのカラムの値が存在するかどうかをチェックできる。

“`ruby:models/posts.rb
class Post < ApplicationRecord validates :content, {presence: true} end ```  `length`を用いて`{maximum:数値}`を指定することで最大文字数を設定できる。 ```ruby:models/posts.rb class Post < ApplicationRecord valida

ユーザ画像の表示(Ruby on Rails)

#プログラミングの勉強日記
2020年7月17日 Progate Lv.207
Ruby on RailsⅦ

#プロフィール画像を表示する仕組み
 データベースに画像のファイル名を保存しておき、そのファイル名の画像を表示する。ファイルを保存するために、usersテーブルにimage_nameカラム(string型)を用意する。

#初期画像の設定
 ユーザの登録時にimage_nameカラムの値が`default_user.jpg`となるようにする`create`アクション内の`@user`を定義しているところで、`new`メソッドの引数として`image_name`を追加する。

“`ruby:users_controller.rb
def create
@user=User.new(
name:params[:name]
email:params[:email]
image_name:”default_user.jpg”
)
….
“`

#ビューに画像を表示
 HTMLの``タグを使う。画像は`public/user_ima

ログイン機能の作成(Ruby on Rails)

#プログラミングの勉強日記
2020年7月18日 Progate Lv.211
Ruby on RailsⅧ

#ログインページの作成
 ログインするためにはログインページからメールアドレスやパスワードなどの情報をRaisに送信する。送信された情報をもとに操作しているユーザを特定しログイン状態とする。ログインページを作るためにルーティング、アクション、ビューを追加する。

“`ruby:routes.rb
get “login” => “users#login_form”
“`

“`ruby:users_controller.rb
def login_form
end
“`

``タグのtype属性をpasswordとすると入力した文字が伏字となるパスワード用のフォームになる。

“`erb:login_form.html.erb

パスワード


“`

#パスワードカラムの追加
 `rails generate migration`を用いて`add_password_to_users`というファイル

アクセス制限(Ruby on Rails)

#プログラミングの勉強日記
2020年7月19日 Progate Lv.211
Ruby on RailsⅧ

#アクション側で共通の変数の定義
 各アクションに対尾したビューファイルはapplication.html.erbの`<%= yield %>`の部分に代入され表示される。各コントローラの全アクションで共通する処理がある場合には、`before_action`を使うと良い。`before_action`を用いることで、アクションが呼び出される際に必ず`before_action`の処理が実行されるので、全アクションで共通する処理を1か所にまとめられる。
 すべてのコントローラで共通する処理はapplicationコントローラにまとめられる。`set_current_user`メソッドを定義し、`before_action`に指定する。

“`ruby:application_controller.rb
before_action :set_current_user
@current_user=User.find_by(id: session[:user_id])
end