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

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

保守運用の際に既存メソッドの定義場所を調べるメソッド[Ruby, Rails]

## 想定

1. 既存のアプリの改修を担当することになった
2. 独自に定義されているメソッドについて、どこで定義されているか知りたい

## 結論

**メソッドがどこで定義されているか調べるメソッド**

“`ruby
method(“メソッド名”).source_location
#=> [“/Users/user_name/dir1/dir2/app/helpers/application_helper.rb”, 78]
# これが定義場所
“`

## 使い方

このメソッドは、`binding.pry`を用いたデバッグ中やrailsコンソール時などに用いることが可能です。(恐らく

以下では、`binding.pry`を用いたデバッグを用いて、メソッドの定義場所を調査しています

“`html:app/views/layouts/application.html.erb



:


<%= flash_messages %>
<% binding.pry %>
<

元記事を表示

Railsのアクションについて

基本的事項の復習。
#1. Railsにおける7つのアクション
|アクション|役割|HTTPメソッド|
|–|–|–|
|index|リソースの一覧を表示する|get|
|new|リソースの新規作成|get|
|create|リソースを新規作成して保存する|post|
|show|記録されたリソースの詳細表示|get|
|edit|リソースの編集|get|
|update|リソースの更新|patch/post|
|delete|リソースの削除|delete|
#2. newとsaveの違い
newのコマンドはリソースの生成のみを行うので、このままではDBに反映するにはsaveのコマンドの実行も必要になる。
createは生成して保存を行うため、イメージとしてはnew+saveというアクション。

元記事を表示

【Rails】rails s するとA server is already running.が発生する

#はじめに
表題の通りですが、rails sするとA server is already running.となってしまい、serverが立ち上がりませんでした。

“`
$rails s
=> Booting Puma
=> Rails 6.0.4 application starting in development
=> Run `rails server –help` for more startup options
A server is already running. Check /home/ec2-user/environment/all-mng/tmp/pids/server.pid.
Exiting
“`

#解決策
logに出てました。

“`
A server is already running. Check /home/ec2-user/environment/all-mng/tmp/pids/server.pid.
“`
となっているので、
server.pidを一度削除して、rails sすると解決しました。

#参考記事
[A serve

元記事を表示

共同開発

インターン生で共同開発をしようという提案が通り、レシピを投稿する簡単なサービスを開発しました。共同開発したサービスの概要、過程、利用したツール等についてまとめていきます。

##メンバー
僕を含めた3人(特に分野を決めていませんでしたが、結果的に僕が開発、他2人が設計中心になりました。「[特に苦労したこと](#特に苦労したこと)」)

# サービス概要
### Food Frofessor
レシピを投稿し、編集、お気に入り登録、コメントができる基本的なサービスです。
[特に苦労したこと](#特に苦労したこと)の経緯や、「共同開発」を経験するといった目的が理由でそこまでハイレベルなサービスにしませんでした。
![food_frofessor-top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/848640/f9de6ff9-4f5b-f941-f34e-951d0b92e165.png)

URL: https://food-professor.herokuapp.com/top (初回のみデータの読み

元記事を表示

【Rails】PV数閲覧数機能(メモ)

#やり方

まず`Gemfile`に`impressionist`を追記。

“`ruby:Gemfile
gem ‘impressionist’
“`

“`:ターミナル
$ bundle install
“`
次に`impressionist`テーブルを作成します。
 

“`:ターミナル
$ rails g impressionist
“`

マイグレーションファイルが生成されるので`rails db:migrate`をします。

“`ruby:
class CreateImpressionsTable < ActiveRecord::Migration[6.1] def self.up create_table :impressions, force: true do |t| t.string :impressionable_type t.integer :impressionable_id t.integer :user_id t.string :controller_name t.st

元記事を表示

railsのカスタムバリデーション機能を使ってNGワード(不適切な内容)を防いでみる

NGワード機能を追加しようと考えていたところ、
あまり参考にできる記事が見つからなかったので、記事を書いてみました。

Qiitaで記事を書くのは初めてですので、拙い面もありますがご了承ください。

– やりたいこと
– 不適切な言葉(下品な言葉など)を防ぎたい
– htmlタグやurl,連続した文字(“あああああ”など)を防ぎたい

– やったこと
– 1. modelにカスタムバリデーションを定義する(非推奨)
– 2. カスタムバリデータクラスを作る(推奨)

## テーブル構成
| テーブル名 | カラム名 |
|:-:|:-:|
|User |name |
|Micropost | content |
|Comment | content |

## 1,2共通の操作
### ブラックリストの作成(好きなように定義してください。)
“`Yaml:config/blacklist.yml

– 不適切な単語1
– 不適切な単語2
– 不適切な単語3
“`

#### 不適切な単語は.gitignoreに入れてgi

元記事を表示

【Ruby on Rails】RSpec実行時に意図しないログが吐き出された

# はじめに
今回の出来事に関しては具体的な原因の特定には至れておりません。
そのため、もし具体的な原因が知りたいという方にとっては参考にならない記事になっていること、予めご了承いただけますと幸いです。

# 環境

Ruby 2.6.5
Ruby on Rails 5.2.6

# RSpec実行時に大量のログが出た
オリジナルアプリの機能追加に伴い、RSpecでテストを実行したところ、以下の画像のように意図しないログが吐き出された。

![スクリーンショット 2021-09-07 22.04.28(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1739857/73337491-d9ac-9041-5192-7c35b0073a62.png)

どうやら“`before do … end“`のブロック内に囲まれたテストデータが作成された時のログのようだ。
(大量のテストデータを作成していてお恥ずかしい限りです。)

画像は一つの“`describe“`ブロック内のログであり、複数の`

元記事を表示

railsチュートリアル第4章 組み込みクラスの変更

####組み込みクラスの変更
継承を使わずにpalindrome?メソッドを直接実行できるのか?

“`rb
>> “level”.palindrome?
NoMethodError: undefined method `palindrome?’ for “level”:String
“`
上のようにエラーになる。

Rubyでは組み込みの基本クラスの拡張が可能
Ruby のクラスはオープンで変更可能
クラス設計者でない開発者でもこれらのクラスにメソッドを自由に追加することが許されています。

“`rb
>> class String
>> # 文字列が回文であればtrueを返す
>> def palindrome?
>> self == self.reverse
>> end
>> end
=> :String
>> “deified”.palindrome?
=> true
“`
真に正当な理由がない限り、組み込みクラスにメソッドを追加することは無作法
ailsの場合、組み込みクラスの変更を正当化できる理由

“`rb
>> “”.blank?
=>

元記事を表示

初めてのGraphQL with Rails ②(Apollo Client編)

## この記事の内容

前回、`GraphQL`の初心者がRailsでGraphQLを使えるようになるまでに調べたことをまとめて書きました。

https://qiita.com/tanutanu/items/58106174392516da5f1d

GraphQLでデータを取得する作業のうち、

– 型の定義
– スキーマの書き方

までは記載できたのですが、肝心の**「どうやってデータを取得してくるか」**が長文になりすぎて書けなかったので、ここに記載します。

参考にしたのはこちらの記事と

https://qiita.com/soutaschool/items/2f65d9bec3753d48bbc0

こちらのチュートリアルなど

https://www.apollographql.com/docs/react/get-started/

実際の実装方法は上記の記事の方が詳しいので、ここでは自分が担当したところでの実装で工夫していた点について主に記載していきます。

## Apollo Clientを扱う
### GraphQLの準備
既存の記事や公式チュートリアルの記載内

元記事を表示

【コピペ】Railsで診断機能を実装する方法

今回はRuby on Railsで診断機能を実装します。
目次は以下の通りです。

###1.コントローラー設計
###2.データベース周り
###3.Viewページ周り
###4.ルート周り

##1.コントローラー設計

“`ruby:perfumes_controller.rb
class PerfumesController < ApplicationController def index end def new @perfume = Perfume.new end def show @perfume = Perfume.find_by(id: params[:id]) end def create @perfume = Perfume.new(perfume_params) params[:perfume][:question] ? @perfume.question = params[:perfume][:question].join("") : false if @perfume.save

元記事を表示

【Devise】本番環境でログインできないときの解決方法

#はじめに
deviseを使用したログインを本番環境で行ったが、再度ログイン画面へリダイレクトされてしまった。
結論、nginxの設定がうまくいっていなかったため、以下のように解決方法をまとめた。

#環境
rails 6.1.4
ruby 2.7.3
nginx 1.20.1
puma 4.3.8
devise 4.8.0

#解決方法
①nginx設定ファイルに「proxy_set_header X-Forwarded-Proto $scheme;」を追加

“`
#/etc/nginx/conf.d/hoge.com.conf

upstream puma-production {
server unix:/var/www/html//shared/tmp/sockets/puma.sock;
}

server {
listen 80;
server_name <ドメイン>;
return 301 https://$host$request_uri;
}

server {
listen 443

元記事を表示

自分以外のユーザーページにアクセスさせない設定

## この記事で学ぶ事

URL
`http://localhost:3000/users/1`
この最後の1を2という風に直接入力すると他のユーザーページに遷移できる
今回は

①アクセスさせない
②存在しないユーザーの場合、ActiveRecord::RecordNotFound例外ではなくてnilを返す

設定をしていきます。

## ①アクセスさせない

app/controller/application_controller

“`ruby
def user_check
return if User.find(params[:id]) == current_user # もし入力した数値のidユーザーとログイン中のユーザが一緒ならこのメソッドを抜ける

flash[:alert] = ‘警告:禁止行為’
redirect_to user_path(current_user)
end
“`

app/controller/users_controller

“`ruby
before_action :user_check
“`

これで自分のページへリダ

元記事を表示

herokuでFailed to install gems via Bundlerが出てデプロイできなかった理由

##はじめに

私は初学者です。この記事も、かなり根本的なミスについてです。

同じく初学者でherokuのデプロイがうまくいかない方の少しでも役に立てればと思い、恥を忍んで投稿します。
それと、考えもしなかった凡ミス、想像もしてなかった原因で、衝撃だったという理由もあります、、、

用語の使い方等おかしな点もあると思いますが、ご指摘いただければと思います。

##結論
結論を言うと、

全ての原因はenvironment直下で git init をし、ワークスペース全体をgitのリポジトリ管理下に置いていたことでした。

“`
/environment $git init 
/environment(main) $
“`

environmentに(main)とついていることや、
gitでリポジトリを開いてワークスペース全体が登録されていることに違和感を覚えていませんでした、、、

故に、いくらプロジェクトフォルダに移動して、その中のGemfile、Gemfile.lockを編集、bundle install、gitにadd、commitしてもデプロイが成功し

元記事を表示

Rails コンテナの docker build を高速化してみる

BuildKit を有効にして docker build した場合、どのくらい高速になるのか確認しました。

## BuildKit
詳細まで理解していませんが、ざっくりまとめると、

* 依存関係のない命令を並列実行できる
* コンパイラやパッケージマネージャのキャッシュディレクトリを保持できる

これらの仕組みにより、ビルドを高速化しているようです。

## 利用方法
BuildKit は `docker v18.06` から使えます。
環境変数 `DOCKER_BUILDKIT=1` を設定するだけで有効になります。

## BuildKit 無効のとき

BuildKit を無効化。

“`
$ export DOCKER_BUILDKIT=0
“`

中間レイヤ削除とキャッシュ不使用のオプションを付けてビルド。

“`
$ docker build . –rm –no-cache -t rails_app -f dockerfiles/rails/Dockerfile

元記事を表示

rails s で An error occurred while installing pg (1.2.3), and Bundler cannot continue.が出た

##概要
macを買い替え、以前のPCで技術書を参考に自作したアプリケーションを立ち上げようとrails s をしたら、表題のエラーが出た。

##開発環境
`MacBook Pro (13-inch, M1, 2020)`
`macOS Big Sur バージョン 11.5.2`

##rails sでエラーが出た
“`terminal:terminal
$ rails s
~
An error occurred while installing pg (1.2.3), and Bundler cannot
continue.
Make sure that `gem install pg -v ‘1.2.3’ –source ‘https://rubygems.org/’`
succeeds before bundling.
“`

素直にやってみる。

“`terminal:terminal
$ gem install pg -v ‘1.2.3’
“`

“`terminal:terminal
$ rails s
Ignoring bootsnap-1.7.3 be

元記事を表示

wicked_pdf 本番環境で動かない問題

## 起きたこと
wicked_pdfをEC2にデプロイしたところ表示されず‥
ログを見ると以下エラー

“`
ActionView::Template::Error (The asset “number_pages.js” is not present in the asset pipeline.
“`

## 対処法

以下の部分を削除

“`




<%= wicked_pdf_stylesheet_link_tag "pdf" -%>
#————–削除————————————-
<%= wicked_pdf_javascript_include_tag "number_pages" %>
#———————————————————-

delegateについて

こんにちは、プレイライフの熊崎です!

昨日の夜食べたラーメンのせいで、若干胃もたれ気味です。
学生の頃はラーメン+ライスでも全然平気だったのに、、、
時の流れを感じますね笑

そんな僕の話は置いておいて、delegateについての記事を書いていきたいと思います。

## deledateとは
> delegateマクロを使って、メソッドを簡単に委譲できます。
https://railsguides.jp/active_support_core_extensions.html?version=6.0#delegate

→ あるクラスに存在するメソッドを他のクラスで使用できるようにする

## どんな時に使用するか?
関連付けられているモデルのメソッドを直接使用したいとき。

## 基本の使い方

“`sample.rb

class SampleUser < ApplicationRecord has_one :sample_plan     # delegateには複数のメソッドを指定できる。 delegate :free_plan?, to: :sample_plan

元記事を表示

Spring Boot学習者が他言語のWebフレームワークを触ってみて気づいたこと

こんにちは。ワタナベトシヒロです。
私はJavaのWebアプリケーションフレームワークであるSpring Bootを学習してきましたが、今回は他の言語のフレームワークも触ってみました。
Spring Boot(Java)、Laravel(PHP)、Ruby on Rails、Django(Python)を比較して、気づいたことを挙げていきます。
ただし、Spring Boot以外のフレームワークでは簡単なCRUD処理のAPIを実装しただけなので、フレームワークへの深い理解はできていません。

# Spring Bootの特徴

## コマンドを入力する機会が少ない?

Spring Bootのプロジェクト作成はWeb上で行ったり、IDEのGUI上で行うことが多いです。

また、LaravelやRailsではモデル作成やコントローラー作成用のコマンドがありますが、Spring Bootではコマンドを使ってファイルを作成する例は見たことがありません。

Spring Bootでは他のフレームワークと比べてCLIを操作する機会が少ない気がします。

## DBのテーブルの作成はSQLで行う

元記事を表示

【Rails】 環境構築

## 手順

#### ① 作業ディレクトリの作成

“`
$ mkdir workspace/my/rails_sample
$ my/rails_sample
“`

#### ② rubyのバージョン切り替え

“`
$ rbenv install 2.7.2
$ rbenv local 2.7.2
$ ruby -v # 指定バーションが表示されて売ればOK
“`

rbenv 〜
rubyのバージョンを切り替えるためのツール

#### ③ bundleとrails

“`
$ gem install bundler

# rubyのライブラリを管理するbundlerをrubyにインストール
“`

“`
$ bundle init

# 生成されたGemfileをgem “rails”に編集

$ bundle install
“`

bundle init 〜
現在の作業ディレクトリ内に、Gemfileを生成

#### ④ プロジェクトの作成

“`
rails _6.0.3.7_ new sample
“`

## その他

– nodeや

元記事を表示

Ruby on Railsを使用する恩恵

おはようございます、プレイライフの熊崎です。

今週は雨の日が多かったですね。
来週も雨の日が多いようで、気が滅入ってしまいます。。。

来週も、雨にも負けず風にも負けず仕事を頑張っていきたいと思います!

## なぜこの記事を書こうと思ったか?
業務を行っていて、railsの機能を充分には使いこなせていなかった。(今振り返ると、そもそも使いこなそうともしていなかったように感じる。)
原因を考えてみたら、下記の原因が考えられた。

– なんでrailsの規約に沿った書き方をしなければいけないのか?という理由が自分の中で明確になっていなかった。
– スピード感を持って開発することが求められている中で、とりあえず動くものを作るということに意識を向け過ぎた。

`スピード感を持って開発することが求められている中で、とりあえず動くものを作るということに意識を向け過ぎた。`に関しては、今までの経験上、後で修正しようと考えても絶対修正まで手が回らないので、都度railsの機能を利用することを徹底することにした。


のように考えても、railsを使用する恩恵の理解が薄いと絶対に上記の意識も薄れて

元記事を表示

OTHERカテゴリの最新記事