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

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

Rubyの変数(ローカル変数)代入ルールまとめ

###基本ルール

“`ruby
変数名 = 文字列、値
name = “taro”
age = 27

#値を代入せず変数名だけを宣言するとエラーになる
name #error

#変数を宣言するには何かしらの値を代入する必要がある
name = nil

#アンダースコアで変数名を書き始める(あまり使われない)
_special_price = 200

#変数名に数字を入れる
special_price_2 = 300

#変数名は慣習として小文字のスネークケースで書く
special_price = 200

#キャメルケースは使わない(エラーにはならないが一般的ではない)
specialPrice = 200

#数字から始まる変数名は使えない(エラーになる)
2_special_price = 200

#一般的ではないが変数名に漢字も使える
特別価格 = 200
“`

###複数代入のルール

“`ruby
#2つの値を同時に代入する
a, b = 1, 2
a \=> 1
b \=> 2

#右辺の数が足りない場合はnilが入る

元記事を表示

form_withヘルパーを用いて投稿できない時の対処法

#はじめに
勉強時のアウトプットとして記載します。
フォームを作る際にform _withヘルパーをよく使うと思いますが、エラーが起きた際に試みた対処法を紹介します。

#対処法

##①formの入れ子を訂正

基本的にform要素の入れ子は禁止されています。
divタグなどをform要素の途中段落に割り込ませていたことがあり、それが原因でデータが送れたり、送れなかったりしました。詳しくは下記を参照してください。

https://ja.stackoverflow.com/questions/30651/form%E3%82%BF%E3%82%B0%E3%81%AE%E5%85%A5%E3%82%8C%E5%AD%90%E3%81%A8%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%BC%E3%81%AE%E8%A7%A3%E9%87%88

##②form_withメソッドの見直し

form_withの書き方

データベースに保存しない場合(一部データの更新する場合とか)
<%= form_with url: "url名", method:

元記事を表示

Shopify CLIでrails createしたらcannot load such file — nokogiri/nokogiriのエラーが発生したがBundlerの設定を変更して対応できた

Shopify CLIを使いたくてプロジェクトを作るほぼ最初からハマった。
Shopify CLIの問題では無いが次に同じようなことで時間を無駄にしないためにメモ。

# 環境

– MacBook Pro (16-inch, 2019)
– CPUはIntel Core i9
– macOS Big Sur (11.5.2)
– Shopify CLI 2.2.2
– Homebrewでインストールできる最新版 (2021/08/25 現在)
– Ruby 2.6.3 (OS標準)
– Bundler 1.17.2
– Node.js / Yarnは多分動けば大丈夫だと思う (が一応バージョンも記載)
– Node.js 14.17.0
– Yarn 1.22.10

普段は `rbenv` を使ってプロジェクトに応じてRubyのバージョンを切り替えているが `shopify rails create` で何かしらエラーが出ていたのでとりあえずOS標準のRubyを使うようにしています。
Shopify CLIはHomebrewでインストール済み

元記事を表示

Ruby 繰り返し処理 eachとmapの違い

#eachとmapの違い
***⚫︎eachは繰り返し処理の時に使います。***
***⚫︎mapは繰り返し処理の結果を配列にしたい時に使う。***

#eachの使い方
まずeachの使い方を見ていきましょう。

“`
scores = [1,2,3]
scores.each do |score|
score*2
end

p scores

““

“`
[1, 2, 3] と出力
“`

***eachは配列scoresの各要素の数字を2倍にした結果を出力しています。***

#mapの使い方

“`
scores = [1,2,3]
scores.each do |score|
score*2
end

p scores

“`
“`
[2, 4, 6]と出力
“`
結果として配列scoresの各要素の数字を2倍した結果を配列として出力されています。

#2つを比較して
eachとmapを比較すると
⚫︎eachはただscoresの中の[1,2,3]を出力しているだけですが
mapはresult = 〜の配列として出力しています。

元記事を表示

【インクリメンタルサーチ】Ajaxを用いたキーワード検索機能の実装

#インクリメンタルサーチとは
>キーワード検索を行う際に、利用者が文字を入力するたびに検索を実行する方式。
検索語全体を入力する前に検索を開始し、一文字進むごとに検索結果が更新し即座に候補を表示させる便利な機能。

#実装内容
今回はDBに保存してあるカラム値を対象にインクリメンタルサーチを使用して選択した値をフォームに自動入力させます。

##処理全体の流れ

1. 検索フォームに入力後、jsファイルでイベントが発火
1. jsファイルから受け取ったデータをコントローラのアクションへ返す
1. データベースからjsファイルで受け取ったデータと合致するデータを抽出し、そのデータをjbuilderへ渡す
1. jbuilderでJSON形式に変換したデータを再度jsファイルに送り、そのデータをもとに検索結果を表示

この説明では何いっているか分かりませんよね、、(自分でも分かりません笑)

#完成形はこちら
![4635318dc0d230da36ba06d6b026197b (2).gif](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

【Rails】お気に入り(いいね)のハートアイコンとカウント数の間に謎の下線、消し方(メモ)

# 目標
#### このハートアイコンとカウント数の間にある下線を消す。

![スクリーンショット 2021-08-25 3.00.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927584/1a17216d-c49e-985a-b37c-2a5e44ce92b3.png)

“`erb:likes.html.erb

お気に入り一覧

<% @like_posts.each do |post| %>
<% if logged_in? %>
<% if current_user.like?(post) %>
<%=link_to post_likes_path(post), method: :delete do %>
 
 <% end %>
<% else %>
<%=link_to post_li

元記事を表示

Railsで無限スクロールの導入

使用環境
Ruby2.6.8
Rails6.1.4

#完成イメージ
TwitterやYoutubeのように、ページ下層部に到達したときに次のページを自動的に読み込む機能の実装

#前提
RailsアプリケーションにjQuueryの導入をしている必要があります。
jQueryの導入をしていないちょ、という方はこちらを参考に。

https://qiita.com/tatsuhiko-nakayama/items/b2f0c77e794ca8c9bd74

#処理の流れ
①kaminariのインストール
②jscrollの導入
③ページネーションの実装
④無限スクロールの実装

##①kaminariのインストール
おなじみgemファイルを操作してbundle installするだけです、はい。
最後の行とか、適当な場所に追加しましょう。

“`:Gemfile
gem ‘kaminari’
“`

“`
$ -> bundle install
“`

##②jscrollの導入
「view/application.html.erb」など、無限スクロールを実装する箇所のheadに

元記事を表示

[Ruby] all?メソッドとinclude?メソッドの合わせ技

##はじめに
少し前にall?メソッドとinclude?メソッドを記事にしましたが、この二つを使うと配列の中に複数の要素が含まれているか確認するのにとても便利だったため、合わせ技を記事にしておきます。
↓それぞれの基本的な使い方はこちらをご確認ください。

https://qiita.com/minhee/items/815d10da29b0eb0dbf68

https://qiita.com/minhee/items/43ba0ec0866988052fb1

##all?とinclude?の合わせ技

配列の中に複数の要素があるかどうかを調べる際にこの二つを組みわせるとすっきりとコードを記述することができます。
例えば、
[1, 2, 3, 4, 5]このような配列があったとして、1と3と5の全てがあるかどうかを調べたいとします。
ここでinclude?の登場ですが、include?の引数は一つしか渡せません。
もしinclude?だけでこれを実現しようとすると下記のようになります。

“`ruby
array = [1, 2, 3, 4, 5]

array.includ

元記事を表示

RailsでのSquare webクレジット決済のサンプル

SquareWebPaymentsSDKを用いたカード決済サイトを構築する一般的な方法は以下のドキュメントに記載されています。
– [Web Payments SDK Overview](https://developer.squareup.com/docs/web-payments/overview)
– [Web Payments SDK Documentation](https://developer.squareup.com/reference/sdks/web/payments): javascriptベースの決済フォーム作成に関するドキュメント
– [Square API Technical Reference](https://developer.squareup.com/reference/square)
– [square/web-payments-quickstart](https://github.com/square/web-payments-quickstart) : 今回のサンプルプロジェクトはこれをベースに作成しました。
– [API Explorer](

元記事を表示

OS system command Run … / Ruby case / Python case / golang case / Nim case

## Ruby

“`ruby:oscommand.rb
current = “test”
system(“ls”)
system(“mkdir” ,”./#{current}”)
#system(“rm” , “-r”, “./#{current}”)
“`

“`terminal
> ruby oscommand.ruby
“`

## Python
“`python:oscommand.py
import ‘os’

os.system(“ls”)
os.system(“mkdir ./test”)
#os.system(“rm -r ./test”)
“`

“`terminal
> python oscommand.py
“`

## golang

“`golang:oscommand.go
package main

import (
“log”
“os/exec”
)

func main(){
title := “test”
cmd := exec.Command(“zip”,”-4″, title + “.zip”

元記事を表示

Ruby 入門 [配列を繰り返し処理する]

配列 [“カフェラテ”,”コーヒー”,”モカ”] 配列は複数のオブジェクトをまとめて使う道具

● .each do

“`rb
配列.each do |変数|
 繰り返し実行する処理
end
“`
● .map do

“`rb
配列.map do |変数|
 変数処置
end
“`
eachメソッドとmapメソッドの違い
mapメソッドはブロックを渡して各要素について処理を行う点が、eachメソッドと似ている。eachメソッドは各要素についてブロックで処理を行うことが目的となり、mapメソッドは各要素を変換した新しい配列を得ることが目的になることが多い。mapメソッドは使う機会が大変多いメソッド。

元記事を表示

Ruby 入門 [比較メソッド]

比較メソッドはその左右にあるものを比較して条件を満たせばtrue、満たさなければfalseを返す。

●if文

“`rb
If 条件
 条件を満たした時の処理
elsif 条件→※何個でも追加できる
 条件を満たした時の処理
els
条件を満たさなかった時の処理
end
“`
● || 『または』

“`rb
if 条件 1 || 条件2
 条件を満たした時の処理
end
※ || は、「または」という意味
“`
● && 『かつ』

“`rb
If 条件1 && 条件2
 条件を満たした時の処理
end
“`
● case

“`rb
case 変数
when 候補1
 変数の値が1と等しい時の処置(複数行書くこともできる)
when 候補2
 変数の値が2と等しい時の処置(複数行書くこともできる)
(以下、候補をさらに追加できる)
end
“`
● n.times do ● n.times{}

“`rb
n(回数).times do
 繰り返し実行する処置
end
※複数行の時do end を使う

n(回数).times {
 繰り返し実行する処置

元記事を表示

Ruby 入門 [表示と変数]

“`
put “hello world”
“`
文字列の表示は『””』で囲む。(数値は囲まない)

“`
order=”カフェラテ””
puts “ご注文は#{order}ですね?” →#{}文字列に計算式や変数を代入できる
“`
orderという変数に『カフェラテ』というオブジェクトを代入する。(左側が変数、右側がオブジェクト)

元記事を表示

JavaScriptの非同期通信でCSRFトークンの検証を回避する

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

#課題
twitterのいいねボタンを押下したときのように、非同期通信でDB更新しつつWebページの見た目を変えたかった。
今回はXHRオブジェクトを作って実装。

“`clip.js
~
XHR.open(‘POST’, URL, true);
XHR.send();
“`

このリクエストが422エラーになる。もう少し詳細を追ってみると、
「ActionController::InvalidAuthenticityToken」
というエラーだった。

# CSRFとrailsのCSRF対策について
**CSRF=クロスサイトリクエストフォージェリ**とは脆弱性のあるWebアプリケーションに対し悪意のあるリクエストを送り攻撃すること。

railsではCSRF対策メソッドとして[protect_from_forgery](https://github.com/rails/rails/bl

元記事を表示

WSL環境下でRailsを動かしたときの小ネタ

# 初めに
WSL1環境下で、Railsを動かしたときにちょっと引っかかった小ネタを紹介します。

# 環境設定
– OS: Windows10 Pro 64bit
– Version: 1909
– OS build: 18363.1256
– WLS
– Ubuntu 20.04
– Ruby 2.7.2
– Rails 6.0.3.3

# BCrypt::Errors::InvalidHash: invalid hash
[devise](https://github.com/heartcombo/devise)を利用しており、またMacからWindows環境へ乗り換えたときに発生する可能性が高いのがこのエラーです。
[Rails: BCrypt::Errors::InvalidHash (invalid hash) Devise 1.5.4 Rails 2.2.5](https://stackoverflow.com/questions/46010754/rails-bcrypterrorsinvalidhash-invalid-hash-devise

元記事を表示

【Ruby on Rails】SNSシェアボタンを実装する方法

#対象者

* SNSシェアボタンを実装予定の方

#目的

* SNSシェアボタンを実装して共有できるように設定する

#実際の手順と実例
###1.前提

Articleモデル使用しています。

###2.’social-share-button’を導入

“`Gemfile
gem ‘social-share-button’
“`

導入後、**bundle install**を実行

その後、configにsocial_share_btn.rbファイルを作成します。

“`terminal
rails g sosial_share_button:install
“`
これを実行することで、表示したいSNSボタンを設定する事ができます。

““config/initialize/sosial_share_button.rb
SocialShareButton.configure do |config|
config.allow_sites = %w(twitter facebook)
end
““
()内に自分の入れたいアプリを入力していく
今回はTwi

元記事を表示

#1 RailsとVue.jsでモーダルウィンドウを実装

せっかくdrinks/show.html.erbをapp.vueに記述しなおしたので、
モーダルウィンドウ的なものを実装したい。
つまり、投稿一覧から投稿を押すと、そのままapp.vueが画面遷移なしに表示されるとか
をやってみたい。
だけど、投稿一覧はerbで実装されてるので、そこからvueコンポーネントを表示できるのか。。。

https://qiita.com/t1gert1ger/items/b048a5fd81dc5a8fbfc8
自分がやりたいような記事はあった。

いや、てかやったことあったな。

**application.html.erb**

“`erb
<%= javascript_pack_tag 'footer' %>
“`

“`footer.vue