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

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

【devise】暗号化前後のパスワードが一致しているか判定するメソッド

## 実現したいこと
Railsでdevise gemを使っている環境にて、暗号化前のパスワードが暗号化後のパスワードと一致しているか確認したい。
例えば、以下のようなケースです。

– 「このパスワードで設定したはずだがログインできず、パスワードがちゃんと設定されてるか確認してほしい」という問い合わせに対して調査する場合
– 有効期限を持たせた複数のパスワードを、過去履歴を含めてDBに保持しており、古いパスワードが入力された場合に「それは古いパスワードです」とアラートを出したい場合

deviseでは、パスワードは暗号化されDBに保存されているため、DBのレコードを参照するだけだと、元のパスワードがどんなものだったかわかりません。

## 解決方法
「入力されたパスワードを自力で暗号化したものでDBを検索する」という方法もありますが、そこまでしなくても一発でわかる`valid_password?`メソッドがdeviseで用意されています。
レシーバにはActiveRecordインスタンス(パスワードが保存されたレコード)、引数に暗号化前のパスワードを指定します。

## 基本例

元記事を表示

Mailgunのダッシュボードが開かない時(Railsチュートリアル学習)

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

Mailgunのダッシュボードが開かない(真っ白なページ)になる時の対処法の共有です。

## 背景
Railsチュートリアル学習の中で(11章)HerokuにMailgunというアドオンを入れるのですが、
`heroku addons:open mailgun`コマンド後にクロームで開こうとしてもうまくいきませんでした。

![スクリーンショット 2021-12-31 083558.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/8ffb4ada-41eb-788a-172b-0fc8470abf24.png)
(真っ白です…)

# 結論
グーグルクロームではなく他のブラウザ(Edge)などで開くとうまくいきます!

# おわりに
お読みいただきありがとうございました、しょぼい記事ですみません?
どなたかの参考になれば嬉しいです。

元記事を表示

deviceを使わないrequest specの基本的なテスト(Userモデルver.)

# まずは超基本テスト

WebブラウザからWebサーバーへHTTPリクエストを送り、Webサーバーから正常なHTTPレスポンスが返ってくるとき、そのHTTPレスポンスのHTTPステータスコードは`200`を返します。

“`spec/requests/user_spec.rb
require ‘rails_helper’

RSpec.describe “Sessions”, type: :request do
describe “GET users” do
let(:test_user) { create(:user) }

before do
session_params = { user: { email: test_user.email, password: test_user.password } }
post “/login”, params: session_params #コメント①
get posts_path #コメント②
end

it “つぶやき一覧ページのリクエストが成功していること”

元記事を表示

Railsのデザインパターン QueryObjectの作り方

#はじめに
Railsで利用されるデザインパターンの一つにQueryオブジェクトがあります。
複雑なActiveRecordモデルの絞り込みを簡単なクラスに閉じ込めることで、可読性と疎結合を保つことができます。
QueryオブジェクトをRelationに対し結合や絞り込み、ソートなどの操作を定義し、Relationを返すクラスとして定義し、
モデルのscopeとして利用することで、メソッドチェーンが利用できるようになります。

#動作環境
Rails 6.1.3
Ruby 2.7.4

#前提
レビューに対する通報機能があり、アイテムの詳細ページでアイテムに紐づいたレビューを一覧表示しています。
そして、レビューに対して通報がすると表示がされないように、自分が通報していないレビューの一覧を取得します。

“`ruby:app/model/review.rb
class Review < ApplicationRecord belongs_to :product belongs_to :user has_many :reports, dependent: :destroy

元記事を表示

rails 7.0では`config/initializers`配下のファイルが少なくなっている

# 概要

`rails new`直後の`config/initializers`配下の初期化ファイルの数が多くユーザの認知的負荷につながっていました。
その中には必ずしもすべてのアプリケーションに必要とは限らない設定や、過去のアップグレードの中で既に不要になっている可能性がある設定が存在していたため、今回ファイル構成が見直され不要あったと判断されたファイルが削除されました。

## rails7.0以前

バージョン7.0以前のrailsでは`rails new`時にアプリケーションの初期設定のファイルが`config/initializers`配下に10ファイル作成されていました。

“`
$ rails -v
Rails 6.1.4.4
$ rails new sample_app
$ tree config/initializers/
config/initializers/
├── application_controller_renderer.rb
├── assets.rb
├── backtrace_silencers.rb
├── content_security_

元記事を表示

railsチュートリアル第十四章 フォロワー

###フォロワー
####受動的関係を使ってuser.followersを実装する
app/models/user.rb

“`rb
class User < ApplicationRecord has_many :microposts, dependent: :destroy # 他のモデルとの間に「1対多」のつながり # has_many関連付けが使われている場合、 # 「反対側」のモデルでは多くの場合belongs_toが使われます。 # dependent: :destroy # ユーザーが破棄された場合 # 、ユーザーのマイクロポストも同様に破棄される。 has_many :active_relationships, class_name: "Relationship", # :active_relationsshitpsデータモデル 能動的関係(フォローしているがフォローはされていない関係) # class_name: テーブル名 "Relationship"

元記事を表示

railsチュートリアル第十四章 フォローしているユーザー

###フォローしているユーザー
####Userモデルにfollowingの関連付けを追加する
app/models/user.rb

“`rb
class User < ApplicationRecord has_many :microposts, dependent: :destroy # 他のモデルとの間に「1対多」のつながり # has_many関連付けが使われている場合、 # 「反対側」のモデルでは多くの場合belongs_toが使われます。 # dependent: :destroy # ユーザーが破棄された場合 # 、ユーザーのマイクロポストも同様に破棄される。 has_many :active_relationships, class_name: "Relationship", # :active_relationsshitpsデータモデル 能動的関係(フォローしているがフォローはされていない関係) # class_name: テーブル名 "Relationship"

元記事を表示

railsチュートリアル第十三章 画像のリサイズ 本番環境での画像アップロード

###画像のリサイズ
ユーザーに手元で画像サイズを変更させるのは不便です。
なので、画像を表示させる前にサイズを変更する(リサイズする)ようにしてみましょう。

画像をリサイズするためには、画像を操作するプログラムが必要になります。
開発環境にインストールします。

“`
sudo apt-get -y install imagemagick
“`
###画像処理用のgemを追加する
Gemfile

“`
source ‘https://rubygems.org’
git_source(:github) { |repo| “https://github.com/#{repo}.git” }

gem ‘rails’, ‘6.0.3’
gem ‘image_processing’, ‘1.9.3’
gem ‘mini_magick’, ‘4.9.5’
gem ‘active_storage_validations’, ‘0.8.2’
.
.
.
“`
“`
$ bundle insta

元記事を表示

Railsの関連付けのオプションについて

## 概要
前回のモデルの関連付けの種類の記事の続きです。
モデルの関連付けの際に使用できるオプションについてアウトプットしていきたいと思います。
[前回の記事](https://qiita.com/soicchi/items/306206fb3eed1d377c6a)

## 環境
ruby: ‘3.0.1’
rails: ‘6.1.4’

## 前提
今回説明するにあたって下記のモデルを想定しています。

usersテーブル

|id|name|
|:–:|:–:|
|1|user1|
|2|user2|

departmentsテーブル(所属部署を管理するテーブル)

|id|name|
|:–:|:–:|
|1|営業部|
|2|開発部|

Assignmentsテーブル(所属部署を管理するテーブル)

|id|user_id|department_id|
|:–:|:–:|:–:|
|1|1|1|
|2|1|2|
|3|2|1|

## オプションの種類
### 1. through
`through`は__多対多__の関係のモデル同士を関連付ける際に、そのモデル

元記事を表示

Heroku + MySQL + Rails6.0でstaging環境を用意する。

## 背景
個人アプリを開発していて、現状はローカル環境と本番環境しか用意していなかった。
本来であればstaging環境で確認後、本番環境にデプロイする流れが望ましいため、staging環境を準備することにした。

## 前提
– Herokuで本番環境が用意できている。

## 手順

### staging環境の作成

“`
heroku create –remote staging
“`

これでstaging環境が作成される。

#### 参考記事

https://devcenter.heroku.com/ja/articles/multiple-environments

### 本番環境の環境変数をインポート + stagingの環境変数にセットする。

“`
heroku config -s -a “本番環境のアプリ名” > envvars.txt
cat envvars.txt | tr ‘\n’ ‘ ‘ | xargs heroku config:set -a “staging環境のアプリ名”
“`

`CLEARDB_DATABASE_URL、DATA

元記事を表示

Rails 7.0.1 のプロジェクトで RSpec 実行環境をセットアップ

Ruby 3.0 x Rails 7 のプロジェクトで RSpec の実行環境を作る方法をメモ的に記します。
具体的には **RSpec と FactoryBot** gem をインストールして設定していきます。

“`
# 環境情報
$ ruby -v
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [arm64-darwin21]

$ rails -v
Rails 7.0.1
“`

結論からいうと Rails 7 独自の設定は特に必要ありません。

# プロジェクトを作成
Rails 7 では `rails new` のオプションでフロントエンド関連の色々を指定できますが、特に指定してません。

“`
$ rails new rails7_rspec
“`

# RSpec 環境用の gem をインストール
rails new した時に rails7_rspec ディレクトリに生成された Gemfile に追記します。

“`
group :development, :test do
gem “debug”, pla

元記事を表示

{自分用メモ}Githubにプッシュ&Herokuにデプロイまで

開発環境
mac OS バージョン11.6
エディタ
VScode

“`
% rails new toy_app
% cd toy_app
“`

group :production do
gem ‘pg’, ‘1.1.4’
end

“`
% bundle config set –local without ‘production’
% bundle install
“`

bundle install(もしくはbundle update)が完了したら、1.2.2でセットアップしたYarnを使ってWebpackerをインストールします。もしWebpackerを既にインストール済みの場合は設定を上書きするかどうかを聞かれるので、そのときは「no」と入力してください。(自分は表示が出ませんでした)

“`
% rails webpacker:install
“`

最後に、GitでこのToyアプリケーションをバージョン管理下に置きます。

“`
% git init
% git add -A
% git commit -m “Initialize repositor

元記事を表示

【Rails】paramsについて

##paramsとは?
→データの入れ物

##どんなデータが入ってるのか?
基本的には以下の2種類の方法で収集されたデータが入ってる。
・投稿フォームなどからPOSTで送信されたデータ
・getのクエリパラメータ

>【クエリパラメータとは?】
例えば、基本のURLが「https:// ○△×□.jp/」だとして、基本のURLにクエリ文字列(URLパラメーター)を加えると「https:// ○△×□.jp/?●=▲×■&○=△×□」となります。
「?●=▲×■&○=△×□」の部分が、クエリパラメーター(URLパラメーター)です。
引用:https://online.dhw.co.jp/kuritama/query-string/

元記事を表示

(初心者)Rails Active Storage  画像が割れて表示されてしまった件

##実行内容

Ruby on Rails にてアプリを作成中。
Active Storageを使ってアップロード済のユーザーアイコン画像を、
以下のコードにより表示させようとした。

“`rb
<% if @user.avatar.attached? %>
<%= image_tag @user.avatar, size: "100x100" %>
<% end %>
“`
##結果
以下のように割れた画像が表示された。
![スクリーンショット 2022-01-09 1.33.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/08a548e6-dae1-1190-a0bc-b51a0cf84190.png)

##解決策
以下のようにコードを修正し、うまく表示された。

“`rb
<% if @user.avatar.attached? %>
<%= image_tag url_for(rails_blob_path(@user.avatar)), size: "10

元記事を表示

新規Railsアプリを作成するには

まずはターミナル上で、下記を実行する。

#新規アプリ名(例:tweet)を入力、 -dオプションでMySQLを使用することを明示
% rails new tweet -d mysql

元記事を表示

クラスとインスタンスの違いを簡潔にまとめる

# はじめに
どんどんアップデートしていく記事にしていこうと思っています。

# 結論
“`
クラス全体で共通した振る舞いを示す
クラスから生成されたインスタンスの振る舞いを示す
属性と属性値の関係
属性はみんなが共通で持っている項目で属性値は個別で異なる

元記事を表示

active_hashで保存した都道府県の検索機能について(ransack使用)

###ransackを用いた検索機能実装

今回は、現在作成しているSNSアプリでransackを使用して、登録されているユーザーの一覧ページから登録地域で絞り込みをする機能を作成していました。
その中で、色々エラーで躓いたため学習用に投稿しておこうと思います。

###gemのインストール
“`
gem ‘ransack’
“`
###コントローラーの変更
“`
class UsersController < ApplicationController def index @users = User.paginate(page: params[:page]) @q = User.ransack(params[:q]) @users = @q.result(distinct: true) @user_prefecture_id = Prefecture.all end end ``` ###viewの設定 ``` <%= search_form_for @q do |f| %>
<%= f.label :prefect

元記事を表示

rails 6のアプリをgit clone後に遭遇したエラー

# rails6 git clone後の手順

### やりたいこと・背景
+ 実装途中のrails6のアプリをgit cloneしたい
+ 間違えて、ローカルのリポジトリを消してしまった際に~~そんなこと滅多にない~~githubにpushしていればなんとかなる
+ 昔作っていたrails6のアプリ実装を再開したい
+ などなど

## ざっくり手順

### 1. `Github`でgit cloneしたいリポジトリをコピー

“`terminal.
$ git clone クローンしたいリポジトリのurl
“`

### 2. `rm -rf Gemfile.lock`でgemのバージョン依存関係をなくす
> git cloneしてきたrailsのアプリは、gemのバージョンの依存関係が固定されてしまっているため。
そのまま、bundle installするとエラーが出る。

:::note info
cd アプリ名
で、railsアプリのディレクトリに移動した後
:::

“`terminal.
$ rm -rf Gemfile.lock
“`

私は、bu

元記事を表示

【Rails】ポートフォリオ制作「バイク専用SNS」KoKo-iiYo

#【Rails】ポートフォリオ制作「バイク専用SNS」KoKo-iiYo

##はじめに

DMM WEB CAMP通学中、3ヶ月目に制作したポートフォリオについて、サイト概要・実装機能などまとめます。

元記事を表示

sidekicq使って定期的なメール配信(rails/Docker/Heroku/circleCI)

# やりたいこと
自作の「[家計簿アプリ](https://www.kyodokoza.com/)」の中で、
定期的(今回は毎週月曜の午前9時)に「支出のまとめ」をメールで配信する。

※完成イメージはgithubのrepositoryを参照してください。

https://github.com/matsu1226/kyodokoza

# 環境
ruby 2.7.4
rails 6.1.4
アプリケーションは、Docker,circleCIを使って、Herokuにデプロイ済み。

“`yml:docker-compose.yml
version: ‘3’
services:
db:
image: mysql:8.0
command: –default-authentication-plugin=mysql_native_password
volumes:
– mysql_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
web:

元記事を表示

OTHERカテゴリの最新記事