Ruby関連のことを調べてみた2022年05月19日

Ruby関連のことを調べてみた2022年05月19日

【30歳から目指すwebエンジニア学習録】Rails6でjQueryの導入につまずいた話

# エラーの発見
– 「いいね」ボタンをAjaxで作ろうとしていた
– jQueryを仕込んでも変化せず、、、
– ターミナルを見るとjs.erbファイルには到達している。
– ブラウザのコンソールを見ると`$ is not define`のエラーログが。

# 解決策
– `$ is not define` で検索するとrails6ではjQueryの導入方法が変わったとの記事があった。
https://qiita.com/RIN_HM/items/bdbd76f5015b3c15bfe9
– こちらの海外の記事の指示に従って直していく。

Introducing jQuery in Rails 6 Using Webpacker

# 手順1 application.jsファイルを移動する
1. assetsの`application.js`ファイルを
1. app/javascript/packsフォルダに移動する。
![image.png](https://qiita-image-store.s3.a

元記事を表示

RuboCop v1.28 から追加された “Style/FetchEnvVar” について

## これはなに

– RuboCop のバージョンアップを行った際に、新しいルール “Style/FetchEnvVar” が追加されており、仕様について調べ適用を行いました
– 適用した “Style/FetchEnvVar” のルールについて簡単にまとめました

## Style/FetchEnvVar について

簡単に記載すると、 `ENV[‘FOO’]` ではなく `ENV.fetch(‘FOO’)` を利用しましょうというルールです

通常 `ENV[‘FOO’]` とプログラムを記述し、実行した際に環境変数 `FOO` が未定義だった場合 `nil` を返却します

`nil` が返ること自体は明らかなため、 `nil` で返る可能性を考慮しプログラムを組むべきと言われればその通りです
しかし、手法は文化や慣習によって対応方法は複数存在することは容易に想像できます

– 環境変数参照後にエラーを発生させたい人
– デフォルト値を定義し何事もなかったかのように処理を継続させたい人
– あえて `nil` のまま処理を継続する人
– `nil` が渡されることを考慮し忘れて

元記事を表示

Ruby symbol

“`ruby
a = {“a”:1,”c”:2}
p a

unless a[:a]
p “unless a”
end

unless a[:cc]
p “unless cc”
end

if a[:a]
p “a ok”
end
if a[:cc]
p “cc ok”
end
“`

“`
{:a=>1, :c=>2}
“unless cc”
“a ok”
“`

元記事を表示

Rails 命名規則について

# Rails 命名規則について

## コントローラを作成する(小文字で複数形)
“`ruby:controller.rb
$ rails g controller homes
“`

コントローラ名 複数形、先頭は英小文字 homes
コントローラのクラス名 複数形、先頭は英大文字 HomesController
ファイル名 複数形、先頭は英小文字 homes_controller.rb

## モデルを作成する(先頭大文字で単数形)
“`ruby:model.rb
$ rails g model List
“`
モデル名 単数形、先頭は英大文字 List
モデルのファイル名 単数形、先頭は英小文字 list.rb
テーブル名 複数形、先頭は英小文字 lists

https://www.wakuwakubank.com/posts/804-it-naming-convention/

https://designsupply-web.com/media/development/4052/

元記事を表示

railsチュートリアルをなるべく嚙み砕く 2章

#railsチュートリアル第2章ですね
この章はscaffoldを使って簡単なアプリを作り出すようです

### 2.1.1
ユーザーのモデル設計です。ユーザーを必要な要素を簡単に書き出すと
| user | 型 |
| — | — |
|id|integer|
|name|string|
|email|string|

ユーザーを識別するための一意なidと名前、メールアドレスですね。
一意というのは他に無い、唯一ということです。

### 2.1.2
マイクロポストのモデル設計です。 マイクロポストというのはTwitterのツイートのことですね。つまりはユーザーがする投稿です。

| microposts | 型 |
| — | — |
|id|integer|
|content|string|
|user_id|integer|

マイクロポストのid これはユーザーのidと同じで一意であることを表しています。そして文章のcontentと、どの ユーザーが投稿したかを表すuser_idです

### 2.2
UsersリソースとHTTPプロトコルという言葉が出てきま

元記事を表示

crystal の AtCoder における Set の使用(健忘録)

# はじめに
https://qiita.com/u2dayo/items/906f4811aa4470b4ffab

@u2dayo さんのコードを写経していましたところ`Set`を使用されていました。
普段は`Hash`で代用していますが、`Set`の使用方法の健忘録と`Crystallizer2`の更新を行いました。

https://github.com/superrino130/crystal-on-paiza.cloud
# C問題『Poem Online Judge』
https://atcoder.jp/contests/abc251/tasks/abc251_c
# Ruby版
“`rb
require “set”

n = gets.to_i
seen = Set.new
max_t = -1
ans = 0
(1…n+1).each do |i|
s, t = gets.split
next if seen.include?(s)
seen << s t = t.to_i if max_t < t max_t = t an

元記事を表示

【30歳から目指すwebエンジニア学習録】bootstrap5系の導入でちょっとつまづいた話

# 起こったこと
– こちらの記事を参考にbotstrapを導入(とても丁寧でわかりやすい記事です)
https://www.techpit.jp/courses/2/curriculums/3/sections/15/parts/51
– こんなエラーが出た。
– どうやらWebpackerが見つからないということらしい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530541/b9e4f285-19e1-7336-164d-4a73ad960ca8.png)

# 解決まで流れ
– こちらの記事を参考にinstallからcompileまでをやってみた
https://qiita.com/ahuiru/items/062bbc1b351819a3eeb8
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530541/c5d645b5-c674-58e9-b91f-2a80940e4a

元記事を表示

【30歳から目指すwebエンジニア学習録】rails generate で余計なファイルを作らない設定をする

# やりたいこと
– rails g コマンドでは、testファイルやhelperファイルなど、一緒に作ってくれる
– が、不要なファイルが作られてしまう。
– そこで、config/application.rbに記述することで、生成されるフォルダを制御する

# 結論
– config/application.rb ファイルに記述。
– ORmapperやらテンプレートエンジンまで設定できる。
– fixtureはFactoryBotを使いたいときとかに設定すると便利そう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530541/d36ba371-9058-f0db-f8c7-8a565eaf9c93.png)

# 参考

##### ジェネレーターのワークフローをカスタマイズする
https://railsguides.jp/generators.html#%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E3

元記事を表示

Rails 検索機能を実装する

### 1、ransackのgemをインストール
“`gemfile
gem ‘ransack’
“`

### 2、アクションに検索処理を実装
“`boards_controller.rb
def index
@boards = Board.page(params[:page]).includes(:user)
@q = Board.ransack(params[:q])
@results = @q.result
end
“`
params[:q]には実際に検索した値がデータとしてが入っている。
ransackメソッドは引数に渡した値を元にDBからデータを抽出している。
resultメソッドはransackメソッドで検索した内容をActiveRecordのオブジェクトに変換する。

### 3、検索フォームを作成する。
“`_search.html.erb
<%= search_form_for @q, url: url do |f| %>
<%= f.search_field :title_or_body_cont,class:'form-control'

元記事を表示

Rails 6 + Webpacker + tailwindcss-railsでError: Cannot find module ‘third-party plugins’

Webpackerを使用しているRails6アプリにGemの`tailwindcss-rails`でTailwind CSSを導入し、YarnでdaisyUIを導入したところ、`production`環境で`rake assets:precompile`中にエラーが発生しました。
daisyUI以外のプラグインをYarnでインストールしても同じようなエラーが発生すると思います。

“`
.
.
.
remote: Running: rake assets:precompile
remote: node:internal/modules/cjs/loader:933
remote: const err = new Error(message);
remote: ^
remote:
remote: Error: Cannot find module ‘daisyui’
remote: Require stack:
remote: – /tmp/build_3e

元記事を表示

rails ページネーションの実装

### 1、gem kaminariをインストール
“`
gem ‘kaminari’
“`
としbundle installで完了。

### 2、デフォルトの設定をいじる

“`
rails g kaminari:config
“`
コマンドでページネーションの設定を書き込むファイルを作成。

“`kaminari_config.rb
# frozen_string_literal: true

Kaminari.configure do |config|
# config.default_per_page = 25
# config.max_per_page = nil
# config.window = 4
# config.outer_window = 0
# config.left = 0
# config.right = 0
# config.page_method_name = :page
# config.param_name = :page
# config.max_pages = nil
# config.para

元記事を表示

Railsでtodoアプリを作った

# 下準備

まずはファイルを作成する
“`
rails new rails-todo
“`
でファイル作成。その後
“`
cd rails-todo
“`
で目的のディレクトリに移動
# Modelを作成
“`
rails g model Task title:string
“`
でstring型のtitleというカラム名を持ったTaskテーブルというモデルを作成した。
このままではデータベースに反映されていないので
“`
rake db:migrate
“`
でデータベースに反映させる。
# Controllerを作成する
“`
rails g controller Tasks
“`
でコントローラーを作成。コントローラーは基本複数形であることに注意。
次に作成されたコントローラーにアクションを追加。/tasksにアクセスした際のアクションを追加。Task.allで全タスクを取得。
“`ruby:app/controller/tasks_controller.rb
class TasksController < ApplicationController

元記事を表示

単体テスト用に ActionView::Helpers::FormBuilder オブジェクトを生成する

# 方法

“`rb
class DummyFormBuilder < ActionView::Helpers::FormBuilder # 引数に Active Record を渡す前提。 def initialize(model_object) object_name = model_object.model_name.param_key template = ActionView::Base.empty options = {} super(object_name, model_object, template, options) end end ``` ```rb # user #=> #
# user.model_name.param_key #=> “user”
let!(:f) { DummyFormBuilder.new(user) }
“`

# バージョン情報

– Ruby 2.7

元記事を表示

【Rails】新規アプリケーション作成までの流れ(確認方法もご紹介)

新規アプリケーション作成時の流れと、その作業がしっかり完了しているのか確認する手順も踏まえてご紹介いたします。

### はじめに

指定したフォルダ内にアプリケーションを格納したい場合は予めフォルダを作成しておく。
(例 projects、Macの場合は「Finder」)

→ 新規アプリケーション作成前にターミナルでそのディレクトリ(フォルダ)に移動しておきましょう。

projectsディレクトリの場合
“`
cd projects
“`

## 1 新規アプリケーション作成

##### ①新規アプリケーション作成コマンドを実行(ターミナル)
“`
rails _6.0.0_ new アプリ名 -d mysql
“`

##### ②作成した以下のファイル内を変更(コードエディタ)
14行目くらいにある encoding: utf8mb4 を encoding: utf8 に変更

config/database.yml
“`
default: &default
adapter: mysql2
encoding: utf8 #こちらの記述に変

元記事を表示

rubyにおけるオブジェクトとメソッドについて

# rubyにおけるオブジェクトとメソッドについて
“`
puts “apple”.length
“`
## オブジェクトとは
文字列や値、配列や浮動小数点等 物。
上記のコードでいう __apple__
## メソッドとは
オブジェクトに意味を与えるもの
上記のコードを参照すると __puts__ __length__
appleというオブジェクトの文字数を表示してになる。

#### 補足

オブジェクトやメソッドは言語によって捉え方が違う。
学習していく中で語句の知識を深めていきたい。

元記事を表示

-3の2乗 という計算

# これは何?

指数演算子が `**` だとして。

`-3**2` という文字列を評価する場合。

* `(-3)**2`
* `-(3**2)`

という二通りの解釈があり得る。

一方。
数学では $-3^{2}$ は $-(3^{2})$ と評価するのが常識となっている。
プログラミング言語ではどうなっているだろうという調査。

# 各言語の対応

## ruby

この調査を始めようと思ったきっかけ。

“`ruby:ruby3.1
p( -3**2 ) #=> -9
“`

つまり、 `-3**2` は `-(3**2)` となる。
[Ruby 3.1 リファレンスマニュアル 演算子式](https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html) を見ると、単項 `-` より `**` の優先順位が上なのでそうだよね。
……という簡単な話ではない。

“`ruby:ruby3.1
p( -2[3] ) #=> 1
p( (-2)[3] ) #=> 1
p( -(2[3]) ) #=> 0

元記事を表示

rubyの基本文法1

# rubyの基本文法

Rubyのプログラムファイルは、拡張子「.rb」で作成する。
“`ruby:qiita.rb
puts ‘Hello world.’
“`

## メソッド(関数)とは
何らかの処理をさせる命令
上記のコードを例にするとputsの部分
## 引数
関数の後ろに続く記述
メソッドに渡す値を記述する
putsメソッドの引数’Hello, World.’によって、「Hello, World.」という文字列が出力されます。
文字列は、ダブルクォーテーション(”)またはシングルクォーテーション(’)で囲む必要がある。
上記のコードを例にするとHello worldの部分

## ターミナルで結果を表示させてみる
`$ ruby 記述したファイル名`
![スクリーンショット 2022-05-16 17.43.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2280943/5ce43089-5092-af53-0b79-5b0272106d78.png)

## 文字列型(Strin

元記事を表示

return、 break、nextの違い

「フォームから入力された値が不正だった場合にエラーメッセージを表示しよう」というメソッドの中で、「もし、このケースであればすぐに次の処理に移りたい」というときその行で「return」させてみたのですがそれだとメソッド自体から離脱してしまい次の行の処理ができなくなってしまったので別の方法を探してみました。

## return

その時のコードはこのような形

“`ruby
def hoge
error_messages = []
CSV.parse(tsv_text, headers: true, col_sep: “\t”) do |row|
error_messages << "shop_id:#{row["shop_id"]}は存在しないIDです" if Shop.find_by(id: row["shop_id"]).blank? error_messages << "user_id:#{row["user_id"]}は存在しないIDです" if User.find_by(id: row["user_id"]).blank? error_mes

元記事を表示

Ruby | Qiita API で自分の記事全てを編集してリンクを追加したスクリプトの例

# 概要

自分の記事全てを取得し、元のテキスト本文にテキストを追加して編集リクエストを続けていく。

ちなみに2000記事ほどを連続で編集しようとすると、途中で制限されたのか、Fobbiden扱いになった。

# コード

“`rb
require ‘net/https’
require ‘uri’
require ‘json’

uri = URI.parse(“https://qiita.com/”)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request_header = {‘Content-Type’ =>’application/json’, “Authorization” => “Bearer #{ENV[‘TOKEN’]}”}

round = 0

# 100はQiita APIのページめくりのMAX
(1..100).each do |i|
get_url = “https://qiita.com/api/v2/users/#{ENV[‘USER_ID’]}/items?pag

元記事を表示

【Ruby】APOD APIで毎日更新される宇宙写真を保存する

# はじめに
NASAのAPIでAPODというのがあって、これが毎日宇宙写真を更新していると知り、デスクトップの背景に使いたいと思ったのがきっかけでした。

https://apod.nasa.gov/apod/lib/about_apod.html

https://apod.nasa.gov/apod/archivepix.html

### 完成形
1. 画像を指定したディレクトリに保存する
2. 指定した日付の宇宙写真のタイトルと説明文を表示する

2の出力はこんな感じです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2549439/530a5d46-001a-8e6a-3354-f8581e310cfe.png)

### 前提・gemなど
`Windows10`
Ruby `3.1.1`
gem `nasa_apod`, `open-uri`, `date`

# 手順
## 1. NASAのAPIキーを生成する
APIキーを生成します。名前とメールアドレスを登録すれば取得

元記事を表示

OTHERカテゴリの最新記事