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

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

ズラーっと並んだ画像を整理したい人におすすめgem(Kaminari)について紹介

どうもこんにちは、

フリーターのブロガーのエンジニア志望です。(ながっ)

今回は、僕が実際に使ってとてつもなく衝撃を受けたGemの一つである

kaminari

というかっこいい名前のGemを紹介しさせてもらいたいと思います!!

投稿型アプリ開発をしている中で商品画像が溜まってくると見づらくなって嫌だな〜と思うことありませんか?

そんな悩みを解決してくれるGemなので、投稿型アプリを作っている方はぜひ使ってみてください!!

まず前提として、
今回は既存アプリに導入するテイで話させてもらいます。

なのでまだ投稿機能ができていないよ〜
という方はそこから始めてください。

ではまず最初にGemfileを開き

“`
gem ‘kaminari’
“`
と下の方に書き込み

“`
bundle install
“`
してあげましょう

次にページネーションを適用したいviewファイル,
controllerファイルに
記入を加えます
僕の場合は本をページネーションしたかったので、
こう書きました

“`books_

元記事を表示

数字の範囲を絞って入力を制限したい

【概要】
—————————————-
1.結論

2.どのように使うのか

3.補足

1.結論
—————————————-
validates_inclusion_of :(カラム名), in:(数字)..(数字) を使う!

2.どのように使うのか
—————————————-
バリデーションの数字の範囲指定になります!

“`ruby:models
validates_inclusion_of :
“`
の”:(コロン)以降”はmigarteフォルダやDBのカラムで設定している任意の名前をいれます!記載する場所はmodelsの任意のフォルダ名になります!

“`ruby:models
in:..
“`
の部分は”..”の前後に範囲にしたい数字を入れます!

例えば100から2000であれば

“`ruby:models
val

元記事を表示

Ruby のメソッドでは最後に評価された値を返す

a は返らないことに注目。

“`.rb
[1] pry(main)> def m
[1] pry(main)* a = 1
[1] pry(main)* b = 2
[1] pry(main)* a
[1] pry(main)* b #最後に評価された b がメソッドの戻り値
[1] pry(main)* end
=> :m
[2] pry(main)> m
=> 2 # 先に評価された a は返らない。
“`

元記事を表示

gem active_hash アクティブハッシュについて

昨晩やったとこさ
アクティブハッシュの導入がうまく言ったので
覚書でーす

というか
一次ソースからmigrationの記述を見つけられず焦った、、、

## 環境
ruby 2.5
rails 5.2.4.3
devise 4.7.2
active_hash 3.1.0

## 参考
[zilkey/active_hash:](https://github.com/zilkey/active_hash)
[collection_select](https://railsdoc.com/page/collection_select)

## ちょっとしたデータの格納に使います。
都道府県のデータ選択など一つのアプリで何箇所か使いたい、
でもDB使うまででもない。
うーん、、、
ってときにおすすめです。
カテゴリでも使えるのかな??

## 簡単導入
gemに

“`ruby:Gemfile
gem ‘active_hash’
“`
いつもの

“`ターミナル
bundle install
“`

## model追加 ここまでは簡単だったOTZ
☓ rails g model

元記事を表示

Active Hashの落とし穴

##概要

今回、Active Hashに格納したデータを商品編集で呼び出す際に落とし穴にハマってしまったので共有しておきます。

qiita内を色々と検索かけてみましたが、なかなか解決せず、沼ってしまいました、、、

##実装内容

一度あらゆるデータを登録して出品したitemに、editアクションで編集する機能を実装します。

ポイントは、編集画面に遷移したら元々登録してあったデータがリセットされずに登録されていることです。

うまくビューファイルの呼び出し記述やモデルのアソシエーションの結びつけをできていれば問題ないのですが、しっかりエラーしまくりました。

##解決方法

先に解決方法から言っておきます。

今回のような機能を実装する場合、Active Hashにあるデータのカラム名は
**xxx_id**
としましょう。

例えばカテゴリーや配送元の都道府県などは固定のデータなのでActive Hashに記述します。ここで、itemのカラムと紐づける場合、しっかりとcategory_idやprefecture_idとしましょう。

逆にモデルでアソシエーションを組む際は、
b

元記事を表示

ヘルパーメソッドで条件分岐をする

##概要

今回は、ビューファイルを記述していく際に、ヘルパーメソッドを用いて条件分岐していく実装について書いていきたいと思います。

具体的には、
フリマアプリなどで「商品が購入されていない時」にはこの部分の表示がしたい。
だったり、
「ユーザーがログインしていない時」はこの表示は隠しておきたい。
と言ったような機能を実装します。

##例

“`ruby:xxx.html.erb
<% if user_signed_in? && current_user.id == @product.user_id %>
“`

これは、記述以下の部分を
「ユーザーがログインしている状態かつ、そのユーザーがこの商品を出品したユーザーだった場合のみ」
表示する記述です。

“`ruby:xxx.html.erb
<% if @item.item_purchase.present? %>
“`

これは、記述以下の部分を
「@itemのitem_purchaseカラムにデータが存在する場合のみ」
表示する記述です。

ここに書いただけでなく、様々な実装があるとは思いますが、作業した内容とし

元記事を表示

HTTPメソッドとアクションとCRUDの関係性について

自分なりに関連性をわかりやすくまとめてみたものを投稿します。

![0e2f8bc0606147b6ebe804657aaede87.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696940/719d18a8-615e-ca2f-e3d8-aca16f1c973a.jpeg)
![85851b58defdb320ba87be7857f711fe.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696940/7dccc6f7-f0f3-b487-58c1-a3b769bb7c22.jpeg)

元記事を表示

【RubyonRails】外部キー制約のついたカラムを追加する

##はじめに
環境
– Ruby 2.6.3
– MySQL5.7

##やりたいこと
旅館のオフィス活用マッチングを作成中
ユーザーがホテルをお気に入り登録できるようにしたい
なお、hotel_favoriteはモデル作成済み。

##方法
hotel_favoriteモデルに、user_idとhotel_idを持たせたい。
(user_idは関連付け済み)

##やったこと

“`
rails g migration AddhotelidTohotel_favorites
“`
→XXXXXXX_add_hotel_ref_tohotel_favorites.rbが作られた。
以下の通り編集しました。

“`XXXXXXX_add_hotel_ref_tohotel_favorites.rb
class AddHotelRefTohotelFavorites < ActiveRecord::Migration[6.0] def change add_reference :hotel_favorites, :hotel, null: false, foreign_k

元記事を表示

ActiveHashで複数のプルダウンメニューを作る方法

【概要】
—————————————-
1.結論

2.ActiveHashとは何か

3.どのように使用するのか

4.補足

1.結論
—————————————-
モデルを複数作って、db/migrateに全て記載する!

2.ActiveHashとは何か
—————————————-
ActiveHashとは変更されないデータをモデルファイルに書き込むことでDBに逐一保存せずにデータを扱えるgemです!

3.どのように使用するのか
—————————————
ActiveHashの導入方法は他のgemと一緒なので省きます!
また自分が反映させたいテーブルも用意しておきます。

“`ruby:コンソール
%rails g model abcdefghi –skip-migrat

元記事を表示

【Rails】フォームのエラーメッセージを非同期で表示する

`form_with`を`local: true`なしで使っても、通常エラーメッセージ部分は非同期処理になりません。
非同期で表示してみたので方法をまとめます。

## FormのView
`form_with`に`local: true`を付けないと、非同期で通信が行われます。

“`erb:app/views/tests/new.html.erb
<%= form_with model: @test do |f| %>
<%= f.text_field :name %>
<%= render 'shared/err_msg' %>
<%= f.submit %>
<% end %>
“`
“`erb:app/views/shared/err_msg.html.erb

“`

## Controller
`@test.save`が失敗した

元記事を表示

【Nuxt × Rails】CORSエラーによるプロキシ設定

フロント側から、Railsにユーザー情報をフォーム送信すると、こんなエラーが。

“`console
Access to XMLHttpRequest at ‘http://localhost:3000’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
“`

通常、フロントもバックもドメインは同じURLだが、異なる場合もある。
そんな時発生するのが、`クロスドメイン通信を許可しない`というエラー。

そこで、プロキシ設定をNuxt側にもRails側にもすることで、CORSエラーを解消する必要がある。

[CORSについて](https://dev.classmethod.jp/articles/cors-c

元記事を表示

gem FriendlyIdの紹介と注意点

##gem FriendlyIdについて
[FriendlyId Guide](https://norman.github.io/friendly_id/file.Guide.html)があるので一部抜粋したものを翻訳します。

> FriendlyIdはRubyのActive Recordのアドオンで、URLのidを文字列に置き換えることができます。

> **FriendlyIdを使用しない場合**
> http://example.com/states/4323454
> **with FriendlyId**
> http://example.com/states/washington
> 人間が読めるキーワードを使ってページを識別するURLの部分を作成します。
> これにより、ユーザーにとっても検索エンジンにとっても、アプリケーションをよりフレンドリーなものにすることができます。

gemの名前のFriendlyIdの由来はここから付けられたものだと言うことがわかりますね。

## 実装の例

弊社のサービスCarelyでも実際にfriendly_idを使用しているので紹介し

元記事を表示

eachメソッドを使ったRubyの繰り返し処理(1から10までの和を求める)

# 環境
>![スクリーンショット 2020-08-31 15.49.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694973/7de31e7d-4555-29a3-20ac-21aa281f02fc.png)

# 模範回答

“`ruby
sum = 0

10.times do |i|
sum = sum + i + 1
end
“`

#自分の回答

“`ruby
sum = 0
numbers = [1,2,3,4,5,6,7,8,9,10]
numbers.each do |n|
sum += n
end
“`

#解説
>僕は配列に対してeachメソッドで繰り返し計算を行っているのに対して模範回答ではtimesメソッドを使っています。ブロックの外でsumという値を定義し、そのsumに対して行う処理をdoからendのブロック内で記述するという点は共通しています。しかし1から10まで全部書くのはスマートじゃないですね。「1から10まで」のように連続した値の範囲を表すも

元記事を表示

フリーターでも分かる、jQuery基礎

どうもこんにちは、

今日はjQueryについて、

僕が学んだ基礎知識を共有していきたいと思います。

まずはじめに

簡単な公式を知らないと、

始まらないので公式から覚えましょう。

“`
$(’HTML要素’).メソッド(引数);

“`

です。

短っ!

と思った方もいると思いますが、

こっから色々と付け足していくのです。

もちろんコレで終わりなわけはありません。

簡単解説

HTML要素

というのは例えば、、

index.html
“`

こんにちは

“`

のところで言うh1です

あと、最後の  ;(セミコロン)   は忘れずにつけましょう。

コレが基本の構文ですね。

ではこの公式を使って、jQueryで何ができるのかを話していきます。

アニメーションを付けられる

はじめ見た時コレはすごいと思いました!

ほんの二行jQueryの記述を加えるだけでこんな変化を生み出せ

元記事を表示

これから学ぶ言語について

HTML
・ウェブページを作成するために開発されたマークアップ言語 <プログラミング言語とは違う>
*他のマークアップ言語 SGML XML
・基本的に、「タイトル」「見出し」「段落」などの要素から構造化
・HTMLには「HTML」「XHTML」「HTML5」など、いくつか種類があり、使えるタグに違いがある

<身近なHTMLの使用例>
 ⑴ウェブサイト
 ⑵電子メール(HTML形式)
 ⑶スマホアプリ

CSS
・構造化された文章のデザインを変更する言語=スタイルシート言語
・文字の太さ、色の変更、背景色の変更、余白の調整などを行う
・CSSはHTML<=マーク言語>と組み合わせて使う
・HTMLとCSSで分けることでソースコードを読みやすくする仕組みになっている

Java Script
・ヴレンダン=アイク氏によって開発された言語
・ユーザー側のWebブラウザと、Webサイトまたはウェブサービスの相互間のやりとりを、円滑にするためのプログラミング言語
・コンテンツを更新したり、

元記事を表示

thorでオプションを定義する6つの方法

Rubyでcliを作るときに定番のgem [thor](https://github.com/erikhuda/thor)ではコマンドのオプション(`–key value` みたいなやつ)を定義するときに`method_option`を利用する.
しかし,いくつかのブログやドキュメント等を参照すると他にもいくつかの方法がある.
この違いがよくわからなかったのでいろいろ確認した.

## オプション定義方法を解説する2種類のドキュメント
thorのドキュメントとしては,[GitHub wiki](https://github.com/erikhuda/thor/wiki)と[公式webサイト](http://whatisthor.com/)の2種類存在する.

GitHub wikiでは [`method_option` と `method_options` で定義する方法](https://github.com/erikhuda/thor/wiki/Method-Options)が紹介されている.
こちらのwikiには `option` / `options` を用いて定義する方法に

元記事を表示

リスト処理関数(cons,car,cdr,atom,list)実装例まとめ

拙作記事『[7行インタプリタ実装まとめ](https://qiita.com/ytaki0801/items/f56bf2c84b522b51b64a)』について,そろそろSchemeとPython以外にも対応しないとなあと思っていろいろ整理した結果,『S式入力の実装部分がほとんどじゃないこれ?』→『あと,リスト処理内容に基準を設けてないと言語ごとに実装方針がバラバラになりそう』となり,とりあえず『`cons` `car` `cdr` `atom` `list`が使える』ようにする記述例を先にまとめていくことにした次第.ターゲット言語上での[純LISP](https://ja.wikipedia.org/wiki/%E7%B4%94LISP)機能実装に近いとでもいいますか.

※Python版については,これを用いたS式入出力記述例も掲載しています(他の言語版も揃ったら別記事に移すかも).

#仕様
* [ドット対(cons cells)](https://ja.wikipedia.org/wiki/Cons_(Lisp))を定義
* アトムは全て文字列,空リストはNULL
* `co

元記事を表示

ヒトゲノムの配列の特定されてないところを見てみたりする夏休みの絵日記的なやつだよ

## はじめに

この記事はすごいテキトーな記事なので真に受けるなよろし。

## 目的

ヒトゲノム計画では、人のDNAの配列が全部明らかにされたと言われていますが、実際にはわかっていない部分もかなりあるはずです。
どこの部分がわかっていないのか、グラフを描きます。

## ヒトゲノムのfastaのダウンロード

Gencodeからヒトゲノムの配列がダウンロードできます。
https://www.gencodegenes.org/human/

ここでは、贅沢にALLをダウンロードします。

“`
wget ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_35/GRCh38.p13.genome.fa.gz
“`

解凍してもいいのですが、`zcat` コマンドを使えばある程度見ることができますね。

まずは `head` を表示してみます。

“`sh
zcat GRCh38.p13.genome.fa.gz | head
“`

“`
>chr1 1
NNNNNNNNNNNNNNNNNN

元記事を表示

rails AWSのデプロイが反映されない場合

## AWS デプロイが反映されない場合に行うこと
環境
rails 5.2.4
unicorn
nginx
capistranoで自動デプロイした場合にすぐにAWSに反映されないことがある方向け

## 解決法
デプロイする前にローカルで
cap production unicorn:stop
この後に、
bundle exec cap production deploy
をターミナルでうちましょう。unicornがストップします。自動デプロイでも同じようにunicornはストップ
させているはずですが、すぐに反映されないことも多いです。私の環境ではこれですぐにデプロイが反映されています

元記事を表示

[過去POST]TECH::CAMPのメンターをしていた時の回答メモを一部公開します

# 過去POST
過去自分がTECH::CAMPのメンターをしていた時期にメモしていた内容を公開します。
小分けにしようとしましたが小粒なものはまとめておきます。
記憶が曖昧なので間違っている箇所もあるかもしれないです…

## Q.ハッシュの中身が取り出せない

movie = {“title” => “ハリーポッター”, “genre” => “ファンタジー”, “year” => “2001年”}
から取りたい文字列を取るコードを書きましょう。
のような問題だったと思います。

### 該当コード

“`ruby

def movie_info(movie, data)
puts movie[data]
end

movie = {“title” => “ハリーポッター”, “genre” => “ファンタジー”, “year” => “2001年”}

puts “以下から一つを選んで入力してください。
・title
・genre
・year”

info = gets.chomp

movie_info(movie, info)
“`

### 解説

元記事を表示

OTHERカテゴリの最新記事