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

Rails関連のことを調べてみた2020年09月28日
目次

とりあえずのdocker-compose upから入って、Web server(Nginx)の基礎設計を学びながら、Dockerを学ぶ①

①環境構築〜最もシンプルなWeb server構築編です

分かりづらい点、不正確な点はコメントいただけましたらモチベーションに繋がります

今回こちらに先立ってZennというサービスで記事を書いて見ました
元記事
[とりあえずのdocker-compose upから入って、Web serverの基礎設計を学びながらDockerを学ぶ① | Zenn](https://zenn.dev/naokit_dev/articles/1f358cf75fab30c55009)

## はじめに

以下のような方とって有益な内容になればと思っています

1. これから初めてのWebアプリを作成する
2. Webアプリを作成し、これからデプロイする
3. 初めてデプロイまで到達したが、Nginxが何をしているかとか、設定内容はコピペでよくわかっていない

私は独学プログラミング5ヶ月目で3の状態に近いかと思います
個人的なメッセージとしては是非1.の状態の方により多く、この記事の内容が届くといいなと思っています
**Dockerがなんとなくわかる、便利な気がする!**、**Webアプリが動く仕組み

元記事を表示

最後に任意の文字があるかのメソッドを作る

【概要】
—————————————-
1.結論

2.どのようにコーディングするか

3.開発環境

1.結論
—————————————-
downcaseメソッド、lengthメソッドと、sliceメソッド3種類を使う!

2.どのようにコーディングするか
—————————————-

“`ruby
def str_discrimination(str_a, str_b)
a_down_str = str_a.downcase #—❶
b_down_str = str_b.downcase
a_len_str = a_down_str.length #—❷
b_len_str = b_down_str.length
if b_down_str.slice(-(a_len_str)..- 1) == a_dow

元記事を表示

[Rails]データベースに保存された情報をviewに表示する方法

## 投稿の内容
今回はデータベースに保存された情報をviewに表示する方法について投稿します。
なお、既にデータベースに情報は保存されている、として投稿します。

実装の流れは以下の通り。

① コントローラーアクションの記述(showアクション)
② 表示したい情報が文字列の場合
③ 表示したい情報が複数枚画像の場合

## 環境
Rails 5.2.4.3
ruby 2.5.1
mysql 14.14
viewはhamlで実装

## ① コントローラーアクションの記述(showアクション)
今回は`商品(item)詳細ページ`に情報を表示したいので、`itemsコントローラーのshowアクション`を使います。

“`items.controller.rb
class ItemsController < ApplicationController #省略 def show @item = Item.find(params[:id]) end #省略 ``` 解説) まず`Itemモデルのpathのidをfindメソッドで検索し、該当するidに属した商品(

元記事を表示

Rails: rake taskを良い感じに書く方法

# 良い感じ = 以下の二点

1. テストしやすいこと
* 工数削減のため
1. (ある程度は)エンジニア間での書き方が統一できること
* 例えば`dryrun`の指定方法が書き手によってまちまちだと、商用でのtask実行時に事故が起きる可能性もあるので統一可能であればした方が良い
* ログのフォーマットが統一されていないと作業効率が悪い

などなど

# コード

“`ruby:lib/tasks/issue_6885.rb
require_relative ‘helpers/all_user_name_update_helper.rb’

namespace :issue_6885 do

desc ‘これはサンプルです’
task all_user_name_update: :environment do
helper = AllUserNameUpdateHelper.new

helper.main
end
end
“`

“`ruby:lib/tasks/helpers/all_user_name_upd

元記事を表示

Rails6 OmniAuth activestorage ユーザー画像を取得する

永遠の初心者による自分のためのメモ。
Rails学習開始3ヶ月。
とりあえずこれで動きました程度に考えていただければ幸いです。
こうした方がええやんと言うご意見がある方は優しいコメント頂けると嬉しいです。

この記事の目的

active storageにユーザーのプロフィール画像を保存する。
ググってみてもcarrierwaveばかりでactive storageの記事をあまり見かけなかったので、同じ境遇の人がいればと思い投稿ました。

環境

Ruby 2.7.1p83
Rails 6.0.3.3

前提条件

deviseによるログイン機能実装済み。

OmniAuthによるTwitter、google、facebookなどのログイン認証機能実装済み。

私は、以下の記事を参考にさせて頂きました

・手続き関連
https://qiita.com/kazuooooo/items/47e7d426cbb33355590e
・OmniAuth導入
https://qiita.com/LuckHack

元記事を表示

Rails6 OmniAuth twitter認証 emailの条件分岐

永遠の初心者による自分のためのメモ。
Rails学習開始3ヶ月。
とりあえずこれで動きました程度に考えていただければ幸いです。
こうした方がええやんと言うご意見がある方は優しいコメント頂けると嬉しいです。

この記事の目的

twitter認証はメールアドレスを取得しないので、ランダムメールアドレスを生成する。
google、facebook認証は、正規のメールアドレスを取得する。
twitterはランダムアドレス。他は、正規のアドレスで条件分岐させる。

環境

Ruby 2.7.1p83
Rails 6.0.3.3

前提条件

deviseによるログイン機能実装済み。

OmniAuthによるTwitter、google、facebookなどのログイン認証機能実装済み。

私は、以下の記事を参考にさせて頂きました

・手続き関連
https://qiita.com/kazuooooo/items/47e7d426cbb33355590e
・OmniAuth導入
https://qiita.com

元記事を表示

英語を習っていない小学1年生でも書ける、l(エル)メソッド

#l(エル)メソッドとは
 時刻や日時を表すときに使うメソッド。指定した現地時間に対応できる。SNSで「何月何日の何時に投稿した」なんてときに使う。テーブルのcreated_atカラムを表示したいときなどに使う。
##現地時間を指定する方法
###ステップ1

“`ruby:config/application.rb
class Application < Rails::Application config.i18n.default_locale = :ja #日本の場合 config.time_zone = 'Tokyo' #東京の場合 end ``` Railsの全ての環境設定のファイルに、上記の記述をする。 ###ステップ2 ja.ymlファイルを作成する。 ```ruby:config/locales/ja.yml ja: time: formats: default: "%Y/%m/%d %H:%M:%S" ``` ###lメソッドの使い方  上記の2つの設定をしたら、時刻の入ったカラムを表示させるメソッドの前に「l」と入れるだけ。 ex

元記事を表示

指定されたエラー場所にファイルがあるのに、rails sで、`rescue in block in modules_for_hoge’: Missing hoge file hoge/hoge_hoge.rb (AbstractController::Helpers::MissingHogeError)と出た時の対処法。

## エラー文

“`ruby:qiita.rb
/home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/abstract_controller/helpers.rb:152:in `rescue in block in modules_for_helpers’: Missing helper file helpers/microposts_helper.rb (AbstractController::Helpers::MissingHelperError)
from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/abstract_controller/helpers.rb:149:in `block in modules_for_helpers’
from /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/actionpack-6.0.3/lib/abstract_controller/

元記事を表示

f.collection_selectの”選択して下さい”を選んだときのバリデーション

#1.やりたいこと
`<%= f.collection_select :address_id, @customer.addresses, :id, :full_address, :include_blank => “選択してください” %>`
フォームにおいて選択せずに一番上の”選択して下さい”を選んだ際にバリデーションをかけたい。
#2.実装する
“`rails:app/controllers/orders_controller.rb
params[:order][:address_id] == “”
flash[:notice] = “選択して下さい”
redirect_to new_order_path
“`
パラメータから送られている値を見ると`””`となっていたのでイコール文を`””`に変更。
#3.終わりに
これを実装したかった時にQiitaやGoogleで検索しても全然出てこなかったので
投稿しました。
しっかりターミナルを見て返ってきてる値を確認しないといけないと痛感しました。

元記事を表示

Redmineのコードリーディング用環境をDocker上に構築する

## 概要

[redmine](https://github.com/redmine/redmine)のソースコードを読むための環境をDockerで構築します。以下の状態をゴールとします。

* [redmine](https://github.com/redmine/redmine)のmasterブランチのコードがDocker上で動作する
* Debug用のツールが使える

## モチベーション

動作環境を構築するのは実際のアプリケーションの挙動とコード内容を頭の中で紐付けながらコードリーディングしたいからです。

### なぜコードリーディングしたいのか?
人が書いたコードを読むことは新たな発見や学びに繋がると考えています。
私の場合は、クラスの分け方、命名、テストコードの書き方、エラーハンドリングの仕方などに悩むことが最近多いので、そのあたりの引き出しを増やしたいというモチベーションがあります。

### なぜRedmineか?
Redmineを選んだのは以下の理由です。

* 普段からRedmineを使っているため馴染みがあり、画面や外部仕様をある程度知っている。
* 長年

元記事を表示

アクションとインスタンスメソッドって一緒じゃないの?何が違うの?

コントローラーに記述されるこれ

““ruby:XXX.controller.rb
def アクション名
XXXXXX
end
““

これってアクションとかインスタンスメソッドって言ったり、どっちが正しいの?何が違うの?

###アクション
=>ルーティングで指定されるときの名前

つまり、これはアクション

““ruby:config/routes.rb
Rails.application.routes.draw do
get ‘index’ to: “tweets#index”
““

###インスタンスメソッド
=>アクションの指定によって実際に実行される、コントローラに実装された「def XXXX ~ end」という形式のコード

つまり上にも書いたこのコードはアクションになる。なるほど。。。

““ruby:XXX.controller.rb
def アクション名
XXXXXX
end
““

元記事を表示

【ActiveAdmin】セレクトボックス内の項目を好きな順でソートする方法

#はじめに
rails_adminを使っていたのですが、セレクトボックス内の項目順序を変えるのすら出来なくて泣き叫んでいました。
調べても調べても分からんかったので、これもしかして出来ないんちゃう……?と。

そこでactive_adminに移行してしまいました。
こちらでは出来ました。

#構成
Item belongs_to Kind

#active_adminで生成したファイルの設定

“`app/admin/items.rb
ActiveAdmin.register Item do
# 変更許可するカラム
permit_params :name, :kind_id

# (中略)

form do |f|
inputs do
input :name
input :kind, as: :select, collection: Kind.all.order(:name)
end

actions
end

end
“`

.orderで逆順にするなら`.order(name: “DESC”)`

#ま

元記事を表示

railsのserver起動時エラー『 Webpacker configuration file not found』対処

本稿では、表題の
『Webpacker configuration file not found』
エラーが発生してサーバーが起動できない時の対処方法について、実際に行った手順を共有します。[^1]

#(実行環境について)

当時の環境について(ここをクリック)

“`
(Windowsの情報)
Microsoft Windows [Version 10.0.18363.1110]
(c) 2019 Microsoft Corporation. All rights reserved.

(Nodeのバージョン)
C:\WINDOWS\system32>node -v
v14.12.0

※Nodeがインストールされていない場合は次のコマンドを実行します。
brew install node

(rubyのバージョン)
C:\WINDOWS\system32>ruby -v
ruby 2.6.6p146 (2020-03-31 revision 67876) [x64-mingw32]
“`

“`
(

元記事を表示

Basic認証を交えたテストコードの書き方

【概要】
—————————————-
1.結論

2.○○になるのはどういう時か

補足:開発環境

1.結論
—————————————-
環境変数を変数に埋め込み、visitでその環境変数を埋め込んだURLに飛ぶようにする!

2.どのように記載するのか
—————————————-

“`ruby
def basic_pass(path) #—❶
username = ENV[“STUDY”]
password = ENV[“STUDY_password”]
visit “http://#{username}:#{password}@#{Capybara.current_session.server.host}:#{Capybara.current_session.server.port}#{path}”
end

RSpec.des

元記事を表示

【rails】HTTPClientを用いて外部APIに接続する方法(QiitaAPIに接続してみた)

## はじめに
railsで外部APIに接続する際にはgemのHTTPClientを使用します。
今回は例としてQiitaのAPIに接続して、記事一覧を取得(get)してみます。

### HTTPClientをインストール
“`:Gemfile
gem ‘httpclient’
“`

“`:ターミナル
$ bundle install
“`

### route.rbに追加
エンドポイントは `/api/qiita`とします。

“`routes.rb
Rails.application.routes.draw do
namespace :api do
get ‘/qiita’ to: ‘qiita#index’
end
end
“`

### QiitaAPIに接続する(Controller)
まず、最も基本的な形です。(headerやqueryを指定しないgetリクエスト)

“`controllers/api/qiita_controller.rb
class Api::QiitaController < ApplicationContr

元記事を表示

しがないRailsエンジニア2年生が2年間の振り返り

初めまして。
あと1ヶ月ほどでエンジニアになって2年経ちます。
振り返りついでにその時感じた課題の変遷をまとめようと思いました。
(一旦Railsに関することだけ抜き出しています)

なんとか生き残ってるエンジニアの課題を共有できれば幸いです。


### エンジニア歴
– 1ヶ月目
– Railsは半年ほど独学でやってきたものの全体的にあまり理解できていなかった
– Rails以外にもエンジニアの仕事の仕方やITの概念が必要で覚えることが多かった
– 3ヶ月目
– 何となくRailsが使えてるだけで天狗になっていた時期
– 動けば良いや精神
– 6ヶ月目
– 動くものは作れるようになったけどこの時は適当に書いて動くからヨシとしていた
– 1年目
– Railsのコードを俯瞰して追えるようになり全くわからなくなった
– 過去の自分が恥ずかしくなった
– Rails以外にReactやサーバ知識など、覚えることが多くRailsは後回しにしていた
– 1年2ヶ月目
– Railsそっちのけでインフラ周りに注力していた
– Railsはまだ動け

元記事を表示

[Ruby on Rails]データ登録時に重複したレコードがあった場合、登録させない

#背景
オリジナルアプリをデプロイ後、重複したデータを登録されていることに気づきます。
![スクリーンショット 0002-09-27 午前9.43.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628696/9f411b90-a3c7-8998-6ea7-8dce789a820f.png)

アプリの仕様としては、登録するレコードは重複させたくないのです。

データベースを確認すると、
登録するユーザが異なっていれば、登録できてしまうことが判明。
![スクリーンショット 0002-09-27 午前9.44.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628696/445d4d8a-b9a8-3095-0bea-e7170ebb30de.png)

解決にそこそこ時間がかかったので、備忘として記録します。
#問題箇所
controllerにデータ登録時の条件を設けていました。

“`
require ‘ru

元記事を表示

Rails Tutorial 第14章 完了、全部で 155.5時間かかりました。

##2020/9/13 0.5時間
14.1.1完了です。

##2020/9/14 0.5時間
14.1.2.1途中です。

##2020/9/15 0.5時間
14.1.2完了です。

##2020/9/16 0.5時間
14.8途中です。

##2020/9/17 0.5時間
14.1.4完了です。

##2020/9/18 0.5時間
14.1.5完了です。

##2020/9/19 2.0時間
14.2.1完了し、演習 14.2.2.2の途中です。

##2020/9/20 2.0時間
14.2.2完了し、14.27の途中です。

##2020/9/21 2.0時間
14.2.3-4完了し、演習16.2.5.1の途中です。

##2020/9/22 2.0時間
14.2.5-14.3.1完了です。

##2020/9/24 0.5時間
14.44の途中です。
9/23は朝早く出社だったのでできませんでした。夜帰宅した後は疲れていてやる気がでないです。朝にやるのがよいと改めて感じました。

##2020/9/25 0.5時間
演習14.3.2.3の途中です。
INNER JOI

元記事を表示

関連付しているモデルのレコードが消せずハマった

# 作業環境
Rails ‘5.2.3’
Ruby ‘2.7.1’
PostgreSQL

# 何にハマったか
レビュー共有アプリ作成中にローカル環境で動作確認中、登録されているitemを削除しようとしましが

`ActiveRecord::InvalidForeignKey in ItemsController#destroy`
`PG::ForeignKeyViolation: ERROR: update or delete on table “reviews” violates foreign key constraint “fk_rails_5350d1b47c” on table “comments” DETAIL: Key (id)=(6) is still referenced from table “comments”. : DELETE FROM “reviews” WHERE “reviews”.”id” = $1`

というエラー、、。`on table “comments”`ってコメントテーブルなんてないぞ。と頭を悩ませていましたが、アプリ作成当初にrevie

元記事を表示

【地図表示】Google Maps JavaScript APIとGeocoding APIを用いてユーザーが登録した住所から地図を表示する!

# 概要
Google Maps JavaScript APIとGeocoding APIを用いてユーザーが登録した住所から投稿詳細ページに地図を表示した時のことを備忘録として記録します。

# 環境
・ruby ‘2.5.7’
・rails ‘5.2.3’

# 前提
・Google MapsのAPIキーを取得済であること
・投稿モデル(ここではDatespotモデル)に住所(adress)カラムがあること

【参考】
[Google MapsのAPIキーを取得する](https://nendeb.com/276)

# 過程
## 1.投稿詳細ページの作成
投稿詳細ページは、各自の仕様に合わせて作成してください。

“`views/show.html.erb

  (省略)

<%= @datespot.name %>

  • OTHERカテゴリの最新記事