Ruby関連のことを調べてみた2020年10月13日

Ruby関連のことを調べてみた2020年10月13日

【Ruby】ハッシュの取り出しについて

●●●問題●●●

“`
puts hash.keys
puts hash.values
“`

上記のメソッドを実行した時に

“`
one
two
three
1
2
3
“`
とターミナルに表示されるような変数hashを作成するためのコードをシンボルを使って記述してください。

●●●回答●●●

“`
hash{one:1,two:2,three:3}
“`

●●●解説●●●

まずはハッシュの構造から。
シンボルをつけるハッシュの記述方法は、キーの後ろにコロンをつけて定義する。

“`
{キー:値}
“`

また、ハッシュオブジェクトに対して、「オブジェクト.keys」とすることで、ハッシュのキーを取得。
「オブジェクト.values」とすることで、ハッシュの値を取得することができる。

“`
(例)
hash{one:1} に対して

hash.keys ⇨ one
hash.values ⇨ 1
“`

よって、上記の回答となる。

元記事を表示

【Rails】Gem gretelを用いたパンくずリスト作成

#そもそもパンくずリストとは
パンくずリストとは下記の写真のようにページを階層順に配列し、ユーザーが操作時に現在どの位置にいるかを可視化したリストです。このようなリストを位置型パンくずリストと呼びます。

![スクリーンショット 2020-10-12 17.09.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758940/94849bb1-ea4c-68a2-f925-caff5832daa0.png)

他にも属性型パンくずリストといいページを階層的に示したものでなく、そのページがどの種類のカテゴリに属しているかを示すリストもあります。属性型パンくずリストの例としてはECサイトが挙げられます。

パンくずリストを導入することによって主に下記の3点のメリットがあります。
・操作性の向上
→ユーザーがサイト内での位置情報を常に確認できる。

滞在時間の向上
→パンくずリストにより階層毎の移動が容易になり回遊性が高まる。

SEO効果
→パンくずリストによりクローラーの巡回をサポートする。

元記事を表示

【Rails】 あいまい検索機能の付け方

経緯

現在絶賛作成中のポートフォリオで、フリマアプリのラクマの仕上げに検索機能をの実装したいと思い作成。さほど難しくはなかったけれども、色々記載しておこうと思います。

環境

ruby 2.6.5
Rails 6.0.3.2
haml使用

イメージ図

ファイル名

ファイル名

手順

1、ルーティングの設定
2、検索フォームを作成
3、モデルに定義
4、コントローラーに設定
5、ビューの作成

の5つの手順になります。
簡単なので、サックと出来ると思います。

ルーティングの設定

今回は、7つの基本アクション以外のアクションを定義します。
7つの基本アクションとは、`index` `new` `create` 等のア

元記事を表示

RailsでCSVインポートする時、nkfコマンドを使ったらめっちゃ楽だった

RailsでCSVファイルをインポートするとき、こんな感じに実装してた。

“`ruby
def read_csv
begin
rows = CSV.read(file, encoding: ‘UTF-8’)
rescue CSV::MalformedCSVError
begin
# csvファイルがUTF-8でない場合はShift_JISで読む
rows = CSV.read(file, encoding: ‘Shift_JIS’)
rescue CSV::MalformedCSVError, Encoding::InvalidByteSequenceError, Encoding::UndefinedConversionError
# csvファイルがUTF-8・Shift_JISでもない場合
@error = ‘ファイルのエンコードはUTF-8かShift_JISではありません。’
end
end
rows&.shift # ヘッダーを削除する
rows
end
“`

元記事を表示

今回使ったlink_toのいろいろ、まとめてみた

#はじめに
今回のカリキュラムで一番躓いたのが、`link_toメソッド`だった。もちろん基本的な使い方は理解しているつもりだが、どうもpathの引数がしっくりときていない。

今回の投稿は何かを説明する目的ではなく、自分がコードを読むための記録である。
以下、今回作成したアプリの全link_toを余計な記述はカットして引数の読み方とともに載せる。

###全link_toメソッド

#####①

“`ruby:application.html.erb

<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
<%= link_to "新規投稿", new_prototype_path %>
“`
サインイン状態で表示させている「ログアウト」と「新規投稿」どちらも誰もが共通するページや処理のため、( )で引数を渡す必要がない。
ユーザーによってログアウトページが違うことはないし、ユーザーによって新規投稿ページが違うことはない。
`link_toメソッド`はデフォルトでHTTPメソッドがGETのため、ログ

元記事を表示

Ruby 標準入力と様々なメソッド

# はいじめに
これは学習用のメモになります。

# 標準入力とは?
もともとはLINUXなどのUnix系OSで用意されていた仕組みです。
標準入力に対応するようにプログラムを作っておけば、プログラム実行時に、ファイルを読み込んだり、キーボードからデータを読み込んだり、パラメータを指定したりというように、入力先を切り替えることができます。

## getsメソッド
標準入力から一行入力

“`
line = gets
puts line
“`

## to_iメソッド
標準入力から一行読み込み、整数に変換

“`
line = gets.to.i
puts line

//入力された数字が出力される
“`
“`
例題)
標準入力で2つの整数が2行で与えられます。
1つ目の数値から2つ目の数値までを、1ずつ増加させながら、1行ずつ順番に出力するプログラムを作成してください。たとえば、3と5という数値が与えられた場合、次のように出力します。

3
4
5
“`
“`
num1 = gets.to_i
num2 = gets.to_i
for i in num1..num2

元記事を表示

Sikuli (SikuliX) + RubyでRPAことはじめ(何度もつまづいたけどちゃんとできたよ)

#Rubyでもできると聞きまして
SikuliXというフリーのRPAツールがあります。([公式](http://www.sikulix.com/)、[ドキュメント](http://doc.sikuli.org/index.html))
Sikuliの後継にあたるものらしいのですが、上記公式に

>SikuliX supports as scripting languages
>Python language level 2.7 (supported by Jython)
>running RobotFramework text-scripts is supported (see docs)
>Ruby language level 1.9 and 2.0 (supported by JRuby)
>JavaScript (supported by the Java Scripting Engine)

と、「Rubyでもコマンドが書けるぜ!」的なことが書いてあり、じゃあちょっとこれで遊んでみようかな、と思いました。[^1]

しかし、Ruby+SikuliXの導入記事って少ないこともあ

元記事を表示

クラウドIDE:Ruby on RailsチュートリアルでHerokuがインストールできなかった件

Ruby on Railsのチュートリアルで、Herokuをインストールしようとしたら、以下のエラーが出て進まなかった件。
調べても何が悪いのかよくわからなかった(゚∀゚)。
`bash: /home/ec2-user/.profile: Permission denied`

実行コマンドはチュートリアルに記載してあった下記の通り。
`source <(curl -sL https://cdn.learnenough.com/heroku_install)` ## 環境 ・AWS,Cloud9の統合環境(クラウド統合環境) ## 対処 解決方法をググっても特に見つからなかった\(^o^)/。 Heroku CLIをインストールするらしいので、Heroku CLIのインストール方法を確認した。 書いてあるコマンドで、チュートリアル以外のコマンドでインストールできないか調べた。 https://devcenter.heroku.com/articles/heroku-cli 下の方にnpmコマンドを使ってもインストールできることが書いてある。 インストールの注意文を見ると、「n

元記事を表示

【Rails6】主なGemについて

#はじめに
 Railsを使うにあたり、当たり前のように“puma“とか“webpacker“とか“listen“を使用していますが、正直あまり意味がわからずに使っていました。ここいらで主なGemについてまとめたいと思います。

#Railsデフォルトの主なGem

 下記がRails6で生成されるデフォルトGemです。

““ruby:Gemfile
# Bundle edge Rails instead: gem ‘rails’, github: ‘rails/rails’
gem ‘rails’, ‘~> 6.0.3’
# Use sqlite3 as the database for Active Record
gem ‘sqlite3’, ‘~> 1.4’
# Use Puma as the app server
gem ‘puma’, ‘~> 4.1’
# Use SCSS for stylesheets
gem ‘sass-rails’, ‘>= 6’
# Transpile app-like JavaScript. Read more: https://

元記事を表示

動画を挿入する方法

#トップページなどに動画を挿入する方法
##GIF
###https://gyazo.com/3015a8b1f689153dcfe7fcb308d483bb
![6582025a04cb61be20a4cabc8a556419.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/725167/cc8863f2-143e-204e-5af2-292b13d9de8e.png)

#下記コード
“`java:index.html

Brilliant Blue

“`
“`java:css
.bg-video-wrap {
position: relative;
}
p {
font-family: serif;
color: #fff;
font-size

元記事を表示

RubyでDIしてみた

## DIとは
dependency injection (依存性注入)のこと

外からconstractorにobject渡せるようにすることで依存を避けようっていうもの

## 実装
Interactorを例に書いていく
[dry-container](https://dry-rb.org/gems/dry-container/0.8/)と[dry-auto_inject](https://dry-rb.org/gems/dry-auto_inject/0.6)を使ってDIしてみた

### DIしてない版
“`not_di.rb

module Interactor
class FindUser
def initialize(params)
@params = params
end

def call
user_repo = UserRepository.new
user_repo.by_pk(@params[:id])
end
end
end

“`
UserRepositoryに依存しているのが

元記事を表示

ターミナルって何?

#ターミナル説明
**ターミナルは、PCに命令をすることができるツールですね。
環境構築を実行するには コマンドラインというツールが必要となります。
Macにデフォルトでインストールされているコマンドラインがターミナルです。**

#コマンドライン説明
**コマンドライン(または コマンドラインインタフェース:CLI )とは、コンピュータに対してキーボードからコマンドという文字を打ち込んで操作を行うツールになります。**

#GUI(グラフィカルユーザインターフェース)
**コマンドラインとは対照的に、グラフィックを用いて操作を行う仕組みを グラフィカルユーザインタフェース(GUI) と言います。**

例えば、「マウスでファイルをダブルクリックして開く」という操作など、普段PCで行う操作のほとんどはGUIで行なっていることが多いです。

![基本.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762918/f4063404-13d5-5ce7-6c67-b1a933fa7ac9.png)

#ター

元記事を表示

マイグレーションファイルから Model を直接触るのはやめて欲しい

## 何が起こったのか
開発環境で新たにDBを作成。

お約束通り、

“`
$ rails db:create
$ rails db:migrate
“`

大量のマイグレーションファイルを一気に migrate しようとしたその時、事件は起こった。

“`
PG undefined column hogehoge …
“`
的な感じで、スッと通らない?
嫌な予感がする。

なになに。。。。

マイグレーションファイルから直接 Model にアクセスしていたんです。

“`ruby:migartion_file

Hoge.delete_all


“`

みたいな感じでモデルに対して直接操作を行う処理が書かれていた?

そのマイグレーションファイルは過去のものであり、その当時はそのモデルがあったのだろうが、今現在のソースコードには存在しない。
当然、 `そんなモデルは無いよ` と怒られたりする。

こんな感じで直接 Model に対して処理を行っているマイグレーションファイルが散見された。
結果 migrate を通すのにものすごく苦労し、過去のマイ

元記事を表示

deviseのコントローラー初期状態まとめ

deviseのコントローラーの初期状態が気になったことがあり、一度サンプルを作る羽目になったのでメモとしてQIITAに残しとく。

“`ruby:confirmations_controller.rb
class Sample::ConfirmationsController < Devise::ConfirmationsController # GET /resource/confirmation/new # def new # super # end # POST /resource/confirmation # def create # super # end # GET /resource/confirmation?confirmation_token=abcdef # def show # super # end # protected # The path used after resending confirmation instructions. # def after_resending

元記事を表示

Ruby on Rails 教わった事 その2

この記事の目的

プログラミングスクールで私が約3ヶ月で教わった事を転職活動に生かすためにまとめました。
私による私のためだけの記事です。

この講義で印象に残った一言は、
RSpecは絶対に身に付けなければいけない必須の技術。

Hamlで書く

Hamlを使うと閉じタグがいらなくなり、コードを減らせる。
Hamlの書き方

モデルメソッド

何回も使うロジックはモデルメソッドにする、DRYにする↓

“`example.html.haml

– – if current_user.id == post.user_id #直書き
+ – post.created_user?(current_user)
%p あなたは投稿した人です
“`

“`post.rb

def created_user?(user)
self.user_id == user.id

元記事を表示

gemfile書き換えによるBundler::Dsl::DSLErrorの対処法

gemfileを書き換えた際のエラー対処法について後発者のためにメモを残しておく。

#####開発環境
`windows 10 home
ubuntu 20.04 LTS
ruby 2.7.1
Rails 6.0.3
postgresql 11`

#エラー文

“`
$ bundle
~~~~~中略~~~~~
Permission denied @ rb_sysopen – /home/admin0/taskleaf2/Gemfile (Errno::EACCES)
~~~~~中略~~~~~
was an error while trying to read from `/home/admin0/taskleaf2/Gemfile`. It is likely that you need to grant read permissions for that path. (Bundler::PermissionError)
~~~~~中略~~~~~
Bundler::Dsl::DSLError
“`
今回は特に理由はないが3つ目のエラー文着目に着目して検索したところ以下のサイ

元記事を表示

並列処理入門 + Rubyでの新しい並列実行単位Ractor

この記事では、並列処理に関する入門的知識を解説する。
さらに、Rubyで開発されている新しい並列実行単位Ractorにも言及する。

まず、この話題をする上で混同しがちな用語についてまとめる。

## 並列処理(parallel)と並行処理(concurrent)について
**並列処理** では、ある瞬間に複数の処理が同時に走る。
**並行処理** では、複数の処理を時分割で順に処理する。並列処理とは異なり、ある瞬間に同時に走る処理は1つだけ。

ある複数の処理が実行されているタイミングを時系列で示すと、下図のようなイメージになる。
(青い線がある部分のみ処理が実行される)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/127392/bd7e86d3-7335-b65b-46f5-9a71c9e07d72.png)

この記事では並列処理の動作について扱うが、並列処理のコードを書いても結局並行処理のように動いている場合もあることには注意。
(例えば、1コアのCPUでは2つ以上の処理を並列

元記事を表示

【Rails】SessionsHelperを使ってコントローラー間でパラメータを受け継ぐ

## はじめに
某プログラミングスクールでフリマアプリを作成中、購入内容の確認ページからクレジットカード登録ページに遷移。カード登録後、購入内容の確認ページに遷移することが出来なくなった。

**原因:コントローラーがitems_controller.rbからcredit_cards_controller.rbに変わった時点でパラメータの:item_idが0になっていた。**

## 詳細

1. ユーザーログイン後、routingでトップページ(items#index)へ遷移。
1. 他ユーザーの出品商品(items#create)の詳細ページ(items#show)へ遷移。
1. 詳細ページ(items#show)の購入ボタンより商品購入ページ(items#purchase)へ遷移。
1. クレジットカード情報の登録・変更するために、登録・変更ボタンより(credit_cards#index)へ遷移。
1. 遷移したが変更がなければ、もどるボタンで商品購入ページ(items#purchase)へ遷移。
1. 変更・未登録ならカード登録ページ(credit_cards#ne

元記事を表示

【Rails】Viewの共有

#Viewの共有
editとnewなど、同じ入力内容を伴うviewをまとめて設定する。
今回用意するのは以下の3ファイル、editとnewは共通する入力フォームを有するものとする。
`_form.html.erb
edit.html.erb
new.html.erb`

共有フォームにて`form_for(@profile)`と記述するれば、ルーティングも自動で行う。
また、submitボタンの表記も自動化されており、日本語化していれば`登録する`、`更新する`と表記される。

##_form.html.erb
共有するフォームを記述する。

“`_form.html.erb
<%= form_for(@profile) do |f| %>

<%= f.label :img %>
<%= f.file_field :img %>
<%# 以下で赤文字でエラー内容を表示 %>
<% if @profile.errors.include?(:img) %>

<%= @p

元記事を表示

Ruby on Rails 教わった事 その1

この記事の目的

プログラミングスクールで私が約3ヶ月で教わった事を転職活動に生かすためにまとめました。
私による私のためだけの記事です。

この講義で印象に残った一言は、
Rails書けると出来るにはレベルに隔たりがある。

コードレビュー

メンターさんにとってすごい人だそうです!
Railsのコードレビューをするときに確認する観点をまとめてみた

コントローラーについて

スコープ

コントローラーの中で、モデルから直接メソッドを呼び出すことはセキュリティーホールに繋がりやすい。基本的に全体対象はイレギュラーであり、ほぼないものとする。↓

“`example_controller.rb

def new
– @post = Post.new #間違ったIDが入る可能性がある
+ @post = current_user.posts.build #curr

元記事を表示

OTHERカテゴリの最新記事