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

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

Excel 表記の変換 R1C1 から A1 へ / A1 から R1C1 へ

Excel 表記の変換方法です。
R1C1表記 から A1表記 へ、 そして A1表記 から R1C1表記 への変換ができます。

Codeforge の 1B がこれに似た問題です。 最近は Excel での作業もそこそこあり、 たまに使いたくなることがあります。

## 関数・定数定義

“`ruby
RC_PATTERN = /\AR(\d+)C(\d+)/
ABC_PATTERN = /\A([A-Z]+)(\d+)\z/

def cv_rc(value)
v = 0
for c in value.split(”)
v *= 26
v += (c.ord – ‘A’.ord + 1)
end
v
end

def cv_a(value)
(‘A’.ord + value – 1).chr
end

def cv_ab(value)
return ” if value == 0

cv_ab((value – 1) / 26) + cv_a((value – 1) % 26 + 1)

元記事を表示

Rails ToDoアプリ タスク管理アプリ (期限切れ・締め切り順・完了ボタン)

# はじめに
雑記事です。また時間を見つけてブラッシュアップいたします。

##完成図
![スクリーンショット 2022-02-19 6.33.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/f9517dd6-6b17-785d-7b13-1948c146b7a2.png)

・タスク一覧に残り期限が表示されている
・タスク一覧にタスクが期限順に並んでいる
・期限切れの未完了タスクの表示を変更している
・未完了タスクに完了ボタンが表示されている
・完了ボタンを押すと、完了したタスク一覧に完了日時が表示される

##前提
タスクの簡単なタイトル投稿が作成済みであること
Railsの基礎的な知識を身につけていること

##実装方法
まずタスクを保存する該当のテーブル(本記事ではtweetsテーブル)にタスクの期限を格納するtimeカラムと、タスクが完了した日を格納するdone_atカラムを追加する

### データベース

以下のコマンドでマイグレーションファイルを生成します。

元記事を表示

RustやElectron、denoに浮気しつつmrubyを使ってMacでクロスコンパイルしwindows用のexeを作るのに苦労した話

## きっかけ
[これ](https://qiita.com/kurokky/items/ca7598ca4a742bcbcdea)のローカル版を作りたいということで

– SVGをパースしてdom上の特定の要素を抽出
– dom上だけではなくinlineのCSSや

内のCSSから特定の要素を抜いてくる

たったこれだけ。
なので**xmlパーサー(XPathなら嬉しい)と正規表現は必須**、cssパーサーは元々の状態で使ってなかったのであれば良しとする。

因みにチャレンジしたフレームワークや言語は

– [Rust](https://www.rust-lang.org/ja)
– [Crystal Language](https://ja.crystal-lang.org/)
– [Electron](https://www.electronjs.org/)
– [deno](https://deno.land/)
– [ruby-packer](https://github.com/pmq20/ruby-packer)
– [mruby](https:

元記事を表示

Ignoring racc-1.5.2 because its extensions are not built. Try: gem pristine racc –version 1.5.2が出た時の対処法

## はじめに
こちら自分用のメモであるためとても雑な記事です。
ただ、同じようなエラーが出た人の助けに少しでもなれば幸いです。
## エラーログ
railsコマンドをターミナルで実行すると無限に以下のメッセージが吐き出される

![スクリーンショット 2022-02-19 2.36.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/5842c8d9-4536-f834-133e-3927a7a3c897.png)

“`.zsh

Ignoring racc-1.5.2 because its extensions are not built. Try: gem pristine racc –version 1.5.2
Ignoring racc-1.5.2 because its extensions are not built. Try: gem pristine racc –version 1.5.2
Ignoring racc-1.5.2 because its

元記事を表示

区間が重なるためのある条件式と `Range#overlaps?` の定義は同じなのか

Rails で定義されている [`Range#overlaps?`](https://api.rubyonrails.org/classes/Range.html#method-i-overlaps-3F) の[定義](https://github.com/rails/rails/blob/2459c20afb508c987347f52148210d874a9af4fa/activesupport/lib/active_support/core_ext/range/overlaps.rb#L8)は

“`rb
def overlaps?(other)
cover?(other.first) || other.cover?(first)
end
“`

となっている。`other` と対比しやすいよう `self` を補うと

“`rb
self.cover?(other.first) || other.cover?(self.first)
“`

となる。

ところで、区間が重なっているか調べるには

“`rb
self.first <= other.end && oth

元記事を表示

【rbenv】`rbenv install 3.1.0`実行時の`BUILD FAILED`を解消した方法【Ruby】【Rails】

##`rbenv install 3.1.0`実行時の`BUILD FAILED`を解消した方法

### 状況
M1 macで以前にRuby 2.7.5をインストールしていました。
OSを11.6.4(Big Sur)から12.2.1(Monterey)にバージョンアップした後にRubyをバージョンアップするために、`rbenv install 3.1.0`を実行した際に、以下のエラーが出てインストールができませんでした。

“`:ターミナル
$ rbenv install 3.1.0
Downloading openssl-1.1.1l.tar.gz…
-> https://dqw8nmjcqpjn7.cloudfront.net/0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1
Installing openssl-1.1.1l…

BUILD FAILED (macOS 12.2.1 using ruby-build 20211227)

Inspect or clean up the w

元記事を表示

[Rails] FactoryBotの実装

# FactoryBot
FactoryBotはRailsでテストサンプルデータを簡単に扱えるように考えられたgem。
rspecと組み合わせて使われる例をよく見ます。

##使い方
###初期設定
“`ruby:spec/rails_helper.rb
config.include FactoryBot:Syntax::Methods # Rspec.configureの中に記述
“`

###Factoryの定義
“`ruby:spec/factories/ex.rb
FactoryBot.define do
factory :ex_user do
name {“user1”}
password {“password”}
end
end
“`
上記の例ではfactoryの名前がex_userでその中に名前とパスワードが格納されています。

###Specへ記述
“`ruby:specテスト内
example “xxxのテスト”
m = build(:ex_user)
end
“`
ex_userをspec内でbuildすることで、テスト内で使用

元記事を表示

RubyのGETリクエストを送る際にヘッダを指定する方法

## 背景
WEBサービスにLINE Loginを実装する際に、ヘッダを指定してGETリクエストを送るのにハマってしまったので、記載。httpartyを使えば、あっさりと書くことができた。

## 環境
– Ruby 2.6.2

## 実装
“`
# httparty.rb
require ‘httparty’

@res = HTTParty.get(“https://api.line.me/v2/profile”, :headers => {“Authorization” => “Bearer #{@response_body[‘access_token’]}”})
“`
## 参考
https://developers.line.biz/ja/docs/line-login/managing-users/#get-profile
https://gist.github.com/jeffdonthemic/99c4da9daba9a4ee36ba

元記事を表示

[備忘録]ActiveAdminで子モデルの要素を引っ張ってくる記述方法

どうも。

受託開発で管理画面の開発をバリバリやっていたとき詰まったところを書いていく

activeadminで子モデルを参照するとき、
・permit_params
・filter
・index/show
・inputs
で書き方が異なる

##今回使うモデル例
“`user.rb
has_one :profile
has_many :items
“`

“`profile.rb
belongs_to :user
“`

“`item.rb
belongs_to :user
“`

“`schema.rb
ActiveRecord::Schema.define(version: 2022_XX_XX_XXXXXX) do
create_table “users”, force: :cascade do |t|
t.string “username”
t.datetime “created_at”
t.datetime “updated_at”
end

create_table “profiles”, force: :cascade do |t|

元記事を表示

Ruby on Rails チュートリアル第10章をやってみて

#ユーザーの更新・表示・削除
■第10章
`edit`、`update`、`index`、`destroy`アクションを加え、RESTアクションを完成させる。まず、ユーザーが自分のプロフィールを自分で更新できるようにできる。

##10.1 ユーザーを更新する
ユーザー情報を編集するパターンは、新規ユーザーの作成と似てるらしい。

###10.1.1 編集フォーム
Usersコントローラに`edit`アクションを追加して、それに対応するeditビューを実装する。

“`ruby:users_controller.rb
def edit
@user = User.find(params[:id])
end
“`

editビューも作成。

“`ruby:edit.html.erb
<% provide(:title, "Edit user") %>

Update your profile

<%= form_for(@use

元記事を表示

【devise】undefined local variable or method `resource_name’の解決策

###解決策 

“`ruby:application_helper
def resource_name
:user
end

def resource
@resource ||= User.new
end

def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
“`
こちらのコードをポイっと入れるだけです!
解決!

元記事を表示

CarrierWave使用時はコールバックの設定位置に注意

Ruby on Railsをで画像をアップロードする際によく採用されるCarrierWaveを使っている際にコールバックの設定で詰まったことがあったので備忘録として残しておきます。

### 行ったこと
Imageモデルに対してafter_commitでsave時に追加で処理を設定しました。

“`ruby
class Image < ApplicationRecord mount_uploader :image, ImageUploader after_save_commit :send_message def send_message ... end end ``` ### 発生した問題 `store_dir`に画像が保存されず、`cache_dir`のデータのままデータが変わらなくなってしまいました。 ```bash # 保存前 uploads/tmp/hoge.jpg # 保存後 uploads/images/hoge.jpg ``` after_commitを使用している例もあり、実装としてNGではなさそう。 https://stack

元記事を表示

【Ruby】each_with_objectを使うと便利だよって話

each_with_objectを使う方と使わない方で同じ結果になる。
each_with_objectを使う方が1行コードを減らせるし、すっきりして見やすいのでeach_with_objectを積極的に使っていきたい。

##each_with_objectを使わない

“`ruby
users = User.all
posts = []
users.each do |user|
posts << user.posts end #> posts
#=> [[#],
[#

元記事を表示

[py2rb] 多重継承の4

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 多重継承 (Python)
https://qiita.com/superrino130/items/89b58bfb4e89500a8e7c

前回の記事で、多重継承は表現できたものの、継承の継承は表現できていなかったので、やってみた。
# delegate (Ruby)
“`ruby
require ‘delegate’

class Fi
def original_method(*args, **kwargs)
‘original’
end
end

class Se1
def method_missing(method, …)
‘dummy’
end
end

class Se2
def initialize(…)
@c = SimpleDelegator.new(Fi).new(…)
@k =[@c]
end

def method_missing(method, …)
@k.each do

元記事を表示

ActiveModelSerializerで発生したN+1問題を解決

##前提

UserとPostは1対Nの関係

“`ruby
class Post < ApplicationRecord belongs_to :user end ``` ```ruby class User < ApplicationRecord has_many :posts, dependent: :destroy end ``` ##解消前 テストログを見るとserializerが走ったときにN+1問題が発生していた。 ```ruby def index posts = current_user.posts render json: posts end ``` ##解消後 ```ruby def index posts = current_user.posts.preload(:user) render json: posts end ``` scopeに切ると他でも使えてベター ```model.rb scope :preload_user, -> { preload(:user) }
“`

“`ruby
def inde

元記事を表示

海賊版サイト問題で”CDN事業者” が提訴されたので技術的にCDNを考える

# はじめに

出版物の海賊版をネット上で公開したとして逮捕された”漫画村”の事件はみなさん記憶に新しいかと思います。
昨今、ネット上で動画や音楽などさまざまなものを楽しめる時代です。出版物のサブスクというのもくるのではないかといわれています。

以下”海賊版”のWikipediaより一文引用します。

>海賊版(かいぞくばん)は、法律上の権利を無視して諸権利を有しない者により権利者に無断で発売または流通される非合法商品である。

権利の生じているものを無断でネット上に公開することは確かに問題だと思います。

ただ、この問題はここで止まりませんでした。
まずは以下の記事を読んでみて欲しいです。(無料公開部分だけでも良いかと思います。)

https://www.asahi.com/articles/ASQ2J4FDJQ2BUTIL068.html

“小学館、集英社、講談社、KADOKAWAの大手出版4社”がCDN事業者を提訴するに至りました。今回、この問題を技術的に考えてみたいです。

# モチベーション
背景として、私はインターン生時代にCDNを使って某コンテンツを配信しておりま

元記事を表示

アプリの新規作成~ GitHubへの反映まで

目的

1. コマンドでアプリケーションを作成する

“`
% cd ~/projects
% rails _6.0.0_ new reizoko-app -d mysql
“`

ここで、database.ymlの「encoding: utf8mb4」を「encoding: utf8」へ変更する。

“`
% cd reizoko-app
% rails db:create
“`

2. GitHubで管理する

GitHubで管理するために、新規アプリケーションのリポジトリを作成する。

① GitHub Desktopを用いてローカルリポジトリを作成する
② first commitというコミットメッセージでcommitする
③ アプリケーションと同名のリモートリポジトリを作成する
(publicにすると、他社がコードレビューできる。「Keep this private」のチェックを外すとできる。)
④ pushする

元記事を表示

attr_writter, attr_reader, attr_accessorについて

まず、この3つのメソッド話題のときに理解していないといけないのはインスタンス変数です。
インスタンス変数とはその名の通り、インスタンスを格納している変数です。(説明になってないので、[こちら](https://qiita.com/wangqijiangjun/items/787c956dab02e516eab9)の記事をご覧ください。)

インスタンス変数というのはクラス外からは参照できないんです。
実際にコードを書いていきます。
“`
class User
def initialize(name)
@name = name
end
end

user = User.new(“John”)
p user.name
=> NoMethodError (undefined method `name’ for #)
“`

上のコードを見ていただくと分かるのですが、インスタンス変数はクラス外部からは参照できないんです。

## attr_reader
そこで、クラス外からインスタンス変数を参照した

元記事を表示

Susan Donovan

https://susandonovan.com/

元記事を表示

ActiveStorageでアップロードしたファイルの名前と拡張子を取得したい

## 前提
– `ActiveStorage`を利用しファイルをアップロード後

※ `Active Storage`使用していなくてもOK

## やること
– アップロードしたファイルの拡張子を表示
– アップロードしたファイル名を表示

## 拡張子の取得
※(今回は`User`モデルに`has_one_attached :avatar`を記載した例です)
### 手順
“`.rb
# アップロードしたファイルのurlを取得
avatar_url = rails_blob_path(@user.avatar)
# => “/rails/active_storage/blobs/xxxxxxxxxxxxxxx/ファイル名.jpg”

# ファイルの拡張子を呼び出す
File.extname(avatar_url).downcase
# => .jpg
“`

## ファイル名の表示

“`.rb
# アップロードしたファイルのurlを取得
avatar_url = rails_blob_path(@user.avatar)
# => “/rails/active

元記事を表示

OTHERカテゴリの最新記事