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

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

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

元記事を表示

【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を使用する恩恵の理解が薄いと絶対に上記の意識も薄れて

元記事を表示

【mariaDB】データベースの中身の確認について

## 環境
Ruby on rails 6.1.4
ruby 2.6.5
capistrano
mariaDB 5.5.68

## 経緯
AWSのEC2を使った環境構築をしています。
capistranoを使い自動デプロイを完了しています。

ローカル環境ではSequel Proを使っていたので、ローカルで保存した情報はすぐ確認することができました。
しかし、本番環境のデータベースの中身を確認する方法がわからず。

素人丸出しの「mariaDB 中身 確認」だとかで検索しましたが出てくるのは「select * from モデル名で中身見れますよ〜」ばかりでした。(初心者すぎて調べ方が分かっていない)

そもそもDBにたどり着く方法がわからず悩んでいたのですが、なんとか辿り着けたので備忘録を兼ねて記事に残そうと思います。

## コード

ターミナル内
まずEC2へログインします

“`
#ホームディレクトリに移動
xxxx@yyyynoAir ~ % cd

#sshディレクトリに移動
xxxx@yyyynoAir ~ % cd .ssh/

#EC2へログイン(ssh -i ダ

元記事を表示

管理者と顧客で権限を分ける場合

今回のアプリケーションを作成する上で、「管理者」と「顧客」という2つの権限が存在するとします。そのような場合、URLでアクセスできる権限を分けることも多いです。管理者と顧客で権限を分ける場合についての記事を書きたいと思います。
私自身のアウトプットの場となりますので、よろしくお願いします!

##権限ごとにURLを分ける
管理者と顧客で権限を分ける場合、下記のように権限ごとにURLを分ける形するケースがあります。

“`ruby:権限ごとにURLを分けた場合の例
顧客がアクセスする商品一覧ページのURL : https://xxxxx.com/items
管理者がアクセスする商品一覧ページのURL : https://xxxxx.com/admin/items
“`

この実装を可能とする方法として、**namespace**を用いて実装します。
また、URLを分けることで生じるメリットについても説明いたします。

##namespaceとは
namespaceとは、決めた名前でルーティングのグループ分けをするための仕組みです。
今回はECサイトを作成しているとします。

元記事を表示

【Rails】複数モデルの作成日付一覧を重複なく表示する

ポートフォリオ作成中の学びのアウトプットとして投稿させて頂きます。
勉強用アプリを作成中に実装した保存された回答(複数モデル存在)を日付順に重複なく表示する方法です。

#実現したいこと
users_controllerのshowアクションで回答の作成日付一覧をviewに表示してそれぞれの日付をクリックするとその日に作成された回答一覧を確認できるようにしたい。
※下図のイメージ
![2021-09-11 1.17.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1640672/36dfcf86-5ffc-9941-26c5-0b445fd23abf.png)

#モデル

回答用モデルとして「answer」と「reaction」が存在。

#showアクションとviewの中身

“`:users_controller.rb
def show
@answers_dates = current_user.answers.map{|dates| dates.created_at.to_d

元記事を表示

Rails Tutorialで詰まったところのまとめ 第1章

◎コードをWebページに反映させるには「git push heroku」をターミナルで実行(デプロイ)しなければならない

◎「rails server」を実行する際は、「cd ~/environment/hello_app/」でカレントディレクトリを変更してあげる必要あり

◎「heroku create」ができるのは5つまで ▶ 5つ作成したら「heroku apps」でappIDを確認して、「heroku destroy –app 」で削除する

◎リスト1.19 「bundle install –without production」を実施する際は、「cd ~/environment/hello_app/」でカレントディレクトリを変更してあげる必要あり

元記事を表示

【初心者向け】Ruby on Railsのform_withを分かりやすく書き直してみる

Ruby on Railsでよく使うform_withですが、初めて見た時に何が書いてあるのかさっぱり分かりませんでした。

今は書いてあることが少しわかるようになったのでその備忘録です。

実行環境: Ruby on Rails 6.0

#まずは簡単なフォームの例

例えばnewアクションに対応したviewである new.html.erbでよく見かけるこんな例文があります。

“`
<%= form_with model: @user, url: users_path do |f| %>
<%= f.label :name %>
<%= f.text_field :name, autofocus: true, autocomplete: "name" %>
<%= f.submit "登録" %>
<% end %>
“`
これは入力ボックスが一つだけ付いたフォームです。
RubyとRuby on Railsに慣れていないとこれがRubyの文法として正しいのか分かりませんよね。

これはもう少し変形してみると分かりやすくなります。

##フォームを分かり

元記事を表示

コントローラーで定義した値をJSに受け渡す

# 開発環境
– OS:macOS Big Sur 11.2.2
– Ruby:2.6.5
– Ruby on Rails:6.0.0
– テキストエディタ:Visual Studio Code

# つまづいたこと
投稿の詳細画面から非同期通信でDB更新をしたいと考えたときに、更新に必要な値を更新アクションを定義しているコントローラーに渡せず詰まった。

コントローラーからビューファイルに値を渡すときはインスタンス変数を定義するが、JavaScriptへはどうしたらいいのだろう?と思い調べてみた。**gon**というgemの導入により実現できるらしい。

# 実践したこと
[gon](https://github.com/gazay/gon)は簡単にJSファイルにデータを受け渡すために作られたgemらしい。(と、いうことは難しい手順を踏めば使わなくてもできるということか・・・)

使い方は、

①まずgemファイルにgonを定義

“` gemfile
gem ‘gon’
“`

②gemをインストール

“`
% bundle install
“`

③includeの記述

元記事を表示

【コピペ】Railsで選択肢を追加していく方法

#Ruby on Railsで選択肢を追加していく方法

実装後参考サイト https://vlogmatome.herokuapp.com/posts/new

##目次
###1.コントローラーを準備する
###2.モデル・データベース周り
###3.viewのコード
###4.ルートをかく

##実装
###1.コントローラーを準備する
まずはコントローラーを準備します。
今回はブランドを投稿していくWebサイトを作成します。
ブランドの選択肢を投稿ごとに追加していきます。

ブランドの投稿はpostsコントローラー。選択肢の追加はbrandsコントローラーで行っていくこととします。
それでは早速コードを書いてみましょう。

“`ruby:posts_controller.rb
class PostsController < ApplicationController def index @posts = Post.all @brands = Brand.all @brand = Brand.where(brand:"") end def

元記事を表示

20代後半以上の初学者が必ずぶちあたる問題に今ある知識で立ち向かう。

プログラミング学習をしているといつか遭遇する世界のナベ○ツ問題。私は今朝でした。
中々具現化せずにスルーしていく人が多いであろうなか締切が迫っているプロジェクトを差し置いてやる。やらねばならない。

【問題】
「「3の倍数と3のつく数字のときだけアホになります」をターミナルに出力しなさい。」

【構想】
条件分岐と条件の組み合わせを利用して実装ができそうです。
範囲→メインとなる30代の数字は全部出力したいので40までとしましょう。
アホになる→リスペクトも込めて「語尾に”!!!”を付与する」あたりで手を打ちましょう。

【step1】
whileメソッドを使って指定した条件下で繰り返し処理を行うよう大枠を作成しましょう。

“`ruby:qiita.rb
def everything_that_happens_twice_will_surely_happen_a_third_time
num = 1
while num <= 40 do ここに条件を書くよ num = num + 1 end end ``` 1から始まるようnumを定義し、whileメソッド

元記事を表示

【Rails】ActiveRecord の order(:count_all) とは何なのか

ActiveRecordにて`GROUP BY`の`COUNT`を取りたいとき、[他の記事](https://site-builder.wiki/posts/1449)を参考に以下のようなコードを書いたのですが、

“`ruby
Article
.where(is_published: true)
.group(:id)
.order(:count_all)
.count
“`
(例文なので全く意味のないクエリですが、本来はjoinsとか色々やって集計してます)

この`order(:count_all)`の`count_all`がどこから来たのか分からず、調べてもわからなかったのでメモとして残しておきます。

## 結論

結論として、この`count_all`というカラム名は、引数なしの`.count`を呼び出した時に`AS`として追加される`COUNT(*)`のエイリアス名を指定しています。

今回のクエリは最後に引数なしの`.count`という集計関数を呼び出していますが、これがないと`order(:count_all)`は機能しません。

実際に吐かれるS

元記事を表示

ネームエラー uninitialized constant NameError

お疲れ様です。
今日はこのエラーを解消できたので備忘録として書かせていただきます。

エラー内容
——-
![A44277D5-02FD-4CC7-8744-87D79B1F1B3A_1_105_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1829786/805b0507-7872-4145-1ec4-9b4c69b99f15.jpeg)

![5D59C0B0-9483-470C-B141-68C054E5022B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1829786/eb505b3a-4095-5992-5c9f-d3d005c4fddf.png)

このエラーで活用させていただきました(ありがとうございます)

https://qiita.com/ngron/items/96664e754a6853591f39

しかしながら、、クラス名とファイル名はあってました。

原因

元記事を表示

fastlaneのdeliverからAppStoreのメタデータ送信する際の留意点

## 概要
2021/08現在における `fastlane deliver` を使った AppStore へのメタデータ送信について、ドキュメントが少なかったので留意点を記しておきます。

## 前準備
#### ■ AppStre API Key

2021/08現在では `deliver` からメタデータをCI経由で送る場合 `AppStore API Key` が必要です。
これがないと 2FA をクリアできないので、、
ローカルで実行するだけであれば、`fastlane` で利用できる通常のログイン機構で大丈夫です。
その場合、コマンドの途中で 2FA のパスワードを求められることになります。

ちなみに.envなどを利用して環境変数に必要keyを格納し、下記のようにAPIKeyを取得できるような `fastlane private action` を `Fastfile` に作っておくと便利です。

“`ruby
#### App Store API への認証Key生成

desc “App Store Connect API Key”
# private_lane :ap

元記事を表示

【Ruby on Rails】font-awesome-sassを導入してアイコンを重ねて表示する方法

#対象者

* RailsアプリにFont Awesome導入予定の方
* Font Awesomeを重ねて表示したい方

#目的

* アイコンを重ねて表示する!

イメージは下記の通り

![スクリーンショット 2021-09-10 7.35.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/6012ab5c-5ffa-548e-857a-d477a681d4da.png)

#####使用環境

Rails 5.2.5

**注意**:Rails6をご使用中の方は導入方法が異なります。詳しくは[こちら](https://pikawaka.com/rails/font_awesome_sass)を御覧ください

#実際の手順と実例
###1.FontAwesomeを設定する

Gemfile

“`
gem ‘font-awesome-sass’
“`

導入後は**bundle install**を実行する

続いてapplication.cssをapplication

元記事を表示

ポートフォリオ紹介(INTELIST)【Ruby on Rails / AWS】

#はじめに
業界・実務未経験者がエンジニア転職を目指して独学で約半年間プログラミング学習を行い、このたび転職用にポートフォリオを作成したため紹介していきたいと思います。
今後もアップデートをしていく予定なので、何かあれば本記事のコメント等にフィードバックをいただけますと助かります!

#アプリ概要
気になるものを何でもかんでもリスト化して管理・シェアするためのSNSアプリ「INTELIST(いんたりすと)」を作成しました。

+ 気になるものをジャンル問わず投稿し、友人とシェアできる
+ リスト化しておくことで後から確認できる
+ 他のユーザーの興味をランキングで確認し、トレンドを把握できる

といった特徴があります。

![toppage.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1166024/4af1158b-a07e-0a9e-1b62-839b27cda8f3.gif)

下記のURLにて公開中ですので、よろしければご覧ください!
[https://inte-l

元記事を表示

【Rails】フォームのplaceholderを改行する方法

# はじめに
今回はフォームの中のplaceholder(下記の画像のもの)を改行する方法について記述します。
![スクリーンショット 2021-06-26 23.11.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623096/d6a42ce5-d965-0c72-60d7-3e06ca2850b9.png)

# 開発環境
Ruby on Rails バージョン2.6.5


# 通常(改行を不要とする場合)の記述
通常改行が不要な場合の記述はこのように記述します

“`ruby
<%= f.text_area :hoge, class:"hoge", id:"hoge", placeholder:'ここに表示させる文字を入力します' %>
“`
ですが、改行をしたplaceholderを作成する場合は、上記の記述に改行を加えても反映されないので、rails helperを使用することで問題が解消されます!

※rails helperをご存知ない方はまずは

元記事を表示

【Ruby】正規表現これだけ理解しておこう!

正規表現を苦手としている方は少なくないと思います。
ただ、正規表現に関しては基礎的な部分だけおさえておけば大きな問題はないと思うので、ここで理解を深めてしまいましょう!

**ある程度自信のある人は一番最後の例題を見てパッと理解できるか確認してみてください。**

#正規表現とは

正規表現とは、**文字列のパターンを表したもの**です。

正規表現は`/ /`で囲んで記述します。

#正規表現の基礎項目

正規表現を扱う上で必要な基礎項目を列挙していきます。

##=~

正規表現と文字列がマッチするかをどうかを調べるためのメソッドです。

“`ruby
正規表現 =~ 文字列
“`

マッチする場合、文字の位置を返し、マッチしない場合、nilを返します。

“`ruby
puts /a/ =~ “dance”
#1
“`

##^ $ \A \z

“`
^は行頭にマッチ
$は行末にマッチ

\Aは文字列の先頭にマッチ
\zは文字列の末尾にマッチ
“`

#[ ]

いくつかの文字のうちその1つを指定したい場合は`[ ]`で囲む。

“`rb
/[abc]/

元記事を表示

[Rails]collection_selectにclassをつける

# はじめに
本記事では、`collection_select`に`class`をつける方法を記述します。

# うまくいかないコード
第5引数、第6引数にオプションを記述し、第7引数にclass名を指定しています。

“`erb
<%= search_form_for @q, url: search_foods_path, class: "food-search", id:"pull-down" do |f| %>
<%= f.label :shop_name_or_shop_name_kana_or_food_name_or_station_cont, '店名・メニュー名・駅名', class: "search-label" %>
<%= f.text_field :shop_name_or_shop_name_kana_or_food_name_or_station_cont, placeholder: "KEYWORD", class: "search-text" %>
<%= f.label :user_nickname_cont, 'ユーザ

元記事を表示

[Ruby] AtCoder過去問 C – Go to School

##はじめに
AtCoder過去問を解きました。
が、今回正解のコードは出来上がったものの理解し切れていません。。。

解説できる方がおられたら、コメント欄にて教えていただけると幸いです。

問題はこちらから確認ください。↓

https://atcoder.jp/contests/abc142/tasks/abc142_c

##C – Go to School
この問題かなりややこしくて入力値のaで受け取っているところは、到着した順位を表しています。
先頭から出席番号1です。

出力で表示されている番号たちは順位ではなく、出席番号で、到着した順に並んでいます。

つまり入力値aの添字+1=出席番号です。

これらの情報をもとに、私がはじめに作ったコードはこちら↓
(このコードは不正解です)

“`Ruby
n = gets.to_i
a = gets.split.map(&:to_i)

n.times do |x|
puts a.index(x+1) + 1
end
“`

上記のコード間違っているかどうかと言うより、処理時間が長すぎて不正解となりました。
この手の問題

元記事を表示

OTHERカテゴリの最新記事