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

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

FiddleでRubyのCバインディングを作るときは RbConfig::CONFIG[‘SOEXT’] で共有ライブラリの拡張子を取得できる

タイトルの通りです。

RubyでFFIを利用してC言語のライブラリなどのバインディングを作成するときは、

* Rubyの標準ライブラリのFiddleを利用する方法
* Ruby-FFIを利用する方法

があります。その際に、プラットフォームごとに、共有ライブラリのファイルの拡張子が異なるため、`case` 文で分岐を作成する必要がありました。例えばこんな感じです。

### case文による分岐

“`ruby
lib_name = case RbConfig::CONFIG[‘host_os’]
when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
‘libssw.dll’ # unconfirmed
when /darwin|mac os/
‘libssw.dylib’ # unconfirmed
else
‘libssw.so’
end
“`

`RbConfig

元記事を表示

[Rails]JavaScript(jQuery)を使ったアコーディオンメニュー

今回はクリックしたら開閉できるアコーディオンメニューの実装をしていきます。
メニューの中身は最初隠していて、クリックで出てきて、しまうとまた隠れるので、色々なところで使える便利な機能です。

完成イメージはこちらです。

![スクリーンショット 2021-07-14 9.36.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1554142/876e5a78-9cea-e05b-507d-878f6e14d0f9.png)

画像なので動きがないので、確認したい方は、ぼくの[ポートフォリオ](https://oogiri-legendroad.com/homes/guide)を確認してみてください。
下部のQ&Aが同じ手順で実装しています。

それではいってみましょう!

#開発環境

> ruby 2.6.3
> Rails 5.2.6

#前提

– jQueryが使える状態
– homes/topビューで実装していきます
– Bootstrapのcardを使っています(別にcardじゃなくても問

元記事を表示

RubyでGmail APIより安全に送る

Gmail,SMTPを使って送る記事が多いですが,パスワード直書きしたくないですよね.
本記事ではOAuthで認証をし,比較的安全なAPIを用いた方法でメールを送信する方法を紹介します.

※自分自身で認証する方法を記載していますので,これをこのままプロダクトに起こすのはあまりよろしくないです.実際のプロダクションに使うときは,OAuthの仕組みについてよく調べてからにしましょう.

# 下準備
GCPを使います.プロジェクトがない人は作ってください.無料枠などはいりませんので,クレジットカード情報は一切必要ないです.
https://console.cloud.google.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601799/3d44025f-5c11-f8cf-5442-60ac4a42a18c.png)
– 新しいプロジェクトより作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

【Rails】メソッド new と build との違い

個人的なメモ。ふと疑問に思ったので。

# 結論

**`new も build も同じ機能を持つメソッドです!!!!違いはありません!!!!`**

**`buildメソッドが new のエイリアス(別名)!`**

**`暗黙の了解として使い分けがあるようです!`**

参考: [build | Railsドキュメント](https://railsdoc.com/page/model_build)

# 慣習として使い分けが存在している

`new`は通常のインスタンス生成に使用される

“`ruby
user = User.new
“`

対して、`build`は**関連付けのなされたモデルのインスタンス生成に使用されるという慣習**があるようです。

“`ruby
new_project = user.projects.build
“`

元記事を表示

【Ruby on Rails】deviceで構築したログイン機能のログアウト時、”Couldn’t find User with~”のエラーが発生した

#経緯
Railsのチュートリアルとしてあるアプリを作成している際に、deviceによってログイン機能を実装しようとしたところ、おっと大変、ログアウト時にエラーが発生した。
自分のためにも、解決までの道筋も記しておこうと思う。

#環境
Ruby 2.7.3
Rails 6.1.3

#エラー内容
![スクリーンショット (29).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1144388/1669c2c9-e966-5033-8544-4ed809e23407.png)

Railsお初にしては何事もなく実装が進み、さーてログアウトしてホームページに戻ってみるぞ~と思ったところ、写真のようなエラーが発生した。

###試したこと1
ガーン、、、と思いつつ、とにもかくにもエラー内容を見てみると、

“”Couldn’t find User with ‘id’=sing_out””

と出ていたので「idにそんなの渡してないよな???」と思いつつ、idについてのコードをいじってみるが解決せず。

元記事を表示

railsのルーティングのnamespace,module,scopeについて

railsでルーティングを記述する際にresources以外で何かないか調べてみたところ、見つけて実際に使ってみて場面によって記述を変えることで分かりやすくなったので復習がてらアウトプットしたいと思います。

#namespace
ファイル構成とURLどちらも指定のパスに指定したい時に使用します。

“`config/routes.rb
Rails.application.routes.draw do
namespace :user do
resources :profiles
end
end
“`

#module
URLは変えたくないけどファイル構成だけ指定のパスにしたい時に使います。

“`config/route.rb
Rails.application.routes.draw do
scope module: :URL do
resources :notice
end
end
“`

#scope
URLは指定のパスにしたいけどファイル構成は変えたくない時に使います。

“`config/routes.rb
Rails.applica

元記事を表示

配列をそのままターミナルに表示するためには

配列`numbers = [1, 3, 5]`を
そのままターミナルに出力させようとしたが表示されないので、
間違えていた部分をまとめました。

文字列か否かを、頭の中で整理できていない時があるので注意したいと思います。

**誤①**

“` .rb
numbers = [1, 3, 5]
puts numbers
“`
(出力)

“`
1
3
5
“`
  

**誤②**

“`.rb
numbers = [1, 3, 5]
puts “numbers”
“`

(出力)

“`
numbers
“`
  

**正**

“`.ruby
numbers = [1, 3, 5]
puts “numbers” + numbers.to_s
“`
(出力)

“`
numbers[1, 3, 5]
“`

元記事を表示

【Rails】閲覧数の表示を実装してみた

####My Profile
プログラミング学習歴②ヶ月目のアカウントです!
プログラミングスクールで学んだ内容や自分が躓いた箇所等のアウトプットの為に発信しています。
また、プログラミング初学者の方にわかりやすく、簡潔にまとめて情報共有できればと考えています。
もし、投稿した記事の中に誤り等ございましたら、コメント欄でご教授いただけると幸いです。 

#対象者

* 閲覧数を表示させたい方

#目的

* 閲覧数を表示させる機能を実装する

#実際の手順と実例
###1.前提
本の内容を投稿するSNSを作成しています。
詳細ページに閲覧数を表示します!

Book(model)
books table
books controller

User model
users table
users controller

###2.モデルの準備
bookとuserと1対Nの関係になる「閲覧数」モデルを作成します。

まずテーブルとモデルを準備します。

“`
rails g model ViewCount book_id:integer, user_id:integer

元記事を表示

MySQLのtoo longというエラー

“`
== 20210713102632 DeviseCreateUsers: migrating ================================
— create_table(:users)
-> 0.0447s
— add_index(:users, :email, {:unique=>true})
rails aborted!
StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Specified key was too long; max key length is 767 bytes
“`

migrationファイルを編集し、db:migrateを実行した所 too long というMySQLのエラー・・

こちら(https://qiita.com/terufumi1122/items/9ea764618eba01144e09) を参考に、
以下のファイルを新規作成しました。
ファイル内容もコピペ

場所:config/in

元記事を表示

【個人開発】海外旅行になかなか行けないので、コロナ禍の渡航難易度を可視化するサービスを作ってみた。

はじめに

![ogp_image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1044144/0cc08847-00c8-ea67-55f1-9f7a157bfffc.jpeg)

突然ですがみなさん、最後に海外旅行に行ったのはいつですか?
多くの方は1年以上海外旅行に行けていないのではないでしょうか?

申し遅れました、Yunoと申します。
【Twitterアカウント】

【今回作ったサービス】
https://www.tripable.jp/

少しだけ私自身の話をすると、2020年11月まではタイに住んでおり、英系金融コンサルティング会社でIFAをしておりました。しかし、コロナの影響で厳しい渡航規制が設けられたことでVISAの更新に問題が生じ、日本に帰国することを余儀なくされました。

私のように、海外で働いていた方の不本意な帰国や、これから海外で働こう、留学しようとしていた方が、渡航不可能になってしまった方は大勢いると思い

元記事を表示

attached?を使って、プロフィール画像を区別する

#はじめに

新規登録の際にプロフィール画像を登録するように設定しました。

しかし写真なんて載せられないユーザーもいると思うのでバリデーションをかけませんでした。

なので投稿した際にプロフィール画像がある人は画像は表示され、ない人はこちらで用意した画像が表示されるようにしたいと思います。

#前提

“`user.rb
class User < ApplicationRecord has_one_attached :avatar with_options presence: true do #バリデーション省略 end end ``` 今回はuserモデルにavatarというファイル名をつけました。 ```review.rb class Review < ApplicationRecord belongs_to :user with_options presence: true do #バリデーション省略 end end ``` ![スクリーンショット 2021-07-13 19.13.31(2).png](https://qii

元記事を表示

[Ruby] firstメソッドとlastメソッド

##はじめに
私が現在作成中のオリジナルアプリに進捗状況を記録していく機能があります。データベースの蓄積されている進捗記録たちの一番最新に更新されたレコードの情報から進捗状況をプログレスバーで表示させています。

その時に役に立ったのがfirstメソッドです。その逆の効果を得られるlastメソッドも一緒に紹介したいと思います。
よろしくお願いします。

##firstメソッド

firstメソッドは配列に対して使用します。配列の中の最初の要素を取り出すために使うメソッドです。つまり配列を添字で0の要素ですね。

“`ruby
配列.first
“`

このように使います。もし配列が空であればnilを返します。

例を紹介します。

“`ruby
fruits = [“apple”, “banana”, “peach”, “melon”]

puts fruits.first
# => “apple”
“`

firstメソッドは引数に数字を与えることで、配列のはじめの要素からいくつまでを取得するか指定することができます。
先ほどの配列fruitsを使って例を見てみましょう。↓

元記事を表示

rails up gradeに伴うgemの依存関係の修正(4.2.8 -> 5.0.0.1)

状況

herokuにデプロイしているアプリのpostgres9.6がEOLに。
postgresのversion upに伴い互換性の問題よりrailsを4.2.8から5にupgradeすることになった。

様々な記事を読み漁り、まずrails version up に伴い発生するgemの互換性問題の解決に取り組むが、うまく行かない。

一気にgemをupdateしようとするのが原因か、bundle update が通りません。

vrsions

– ruby 2.5.3
– rails 4.2.8 –> 5.0.0.1
– bundler 1.17.3

gemfileの現状

~~~ruby:gemfile
source ‘https://rubygems.org’

ruby “2.5.3”

-gem ‘rails’, ‘4.2.8’
+gem ‘rails’, ‘5.0.0.1’

gem ‘clockwork’
-gem ‘coffee-rails’, ‘~> 4.1.0’
+gem ‘coffee-rails’#, ‘~> 4.1.0’
gem ‘da

元記事を表示

Rails6でDockerを用いてrails newするまで

# 本記事の目的
タイトルにある通り、Rails6でDockerを使用し環境構築を行う。
今までRails5をメインに使用してきたのでその忘備録も兼ねて執筆。
※Webpackerとは
https://railsguides.jp/webpacker.html

# 環境構築手順
どうやらRails6からWebpackerがデフォルトとなり、環境構築が一筋縄ではいかないらしい。
Dockerの公式マニュアルを読みながら、作業開始!
https://docs.docker.com/samples/rails/

##手順1.
まずはターミナルを開き

“`
% mkdir
% cd
“`

でアプリを作成するディレクトリの作成と作業ディレクトリへの移動。

##手順2.

“`
% touch Dockerfile
% touch Gemfile
% touch Gemfile.lock
% touch entrypoint.sh
% touch docker-compose.yml
“`
でDockerコンテナ作成のためのファイルを用意。

##手順

元記事を表示

[Rails]ActionCableでリアルタイム機能を実現してみた

# はじめに
Action Cableは、 WebSocketとRailsのその他の部分をシームレスに統合するためのものです。ちなみに、WebSocketとは、Webにおいての双方向通信を、従来のHTTP等よりも低コストで行うための仕組み。

# 事前知識
## コンシューマー
WebSocketコネクションのクライアント。複数のケーブルチャネルにサブスクライブできます。

## Pub/Sub
パブリッシャ-サブスクライバ(pub/sub)型モデルとも呼ばれる、メッセージキューのパラダイムです。`パブリッシャ側(Publisher)が、サブスクライバ側(Subscriber)の抽象クラスに情報を送信`します。

## 購読(subscription)
クライアントがWebsocket通信を通じたチャネルと関連付け。購読は、一度に複数のチャネルに対して作成可能。

## app/channels/〇〇_channel.rb
Websocket処理におけるコントローラーのような役割を果たす。

“`ruby
class RoomChannel < ApplicationCable::

元記事を表示

[Rails]ローディング(ロード画面)の実装

おしゃれなサイトはローディングをよく実装していますので、今回はポートフォリオにて実装してみました。

思ったよりかんたんに実装できて、サイト全体の雰囲気がアップするのでおすすめです!

参考にしたサイトは以下で、「1.【サンプル】ローディング(テキストだけでふわっと)」をRailsのアプリケーションに落とし込んで解説していきます。
[【jQuery】 ローディング、実装サンプル集](https://125naroom.com/web/3835)

#開発環境

> ruby 2.6.3
> Rails 5.2.6

#実装方法

今回はHTMl,CSS,JavaScriptを使ってローディングを実装していきます。
ではいってみましょう〜!

#ビュー
まずはビューから、このビューのid名、class名に対してCSSやJavaScriptをあてていきます。

今回はhomes/topで実装。

`1番上の行`から記述していってください。

“`erb:views/homes/top.html.erb

元記事を表示

Rubyでトリボナッチ数列をパッと出したい

#はじめに

はじめまして、某WEBCAMPの生徒です。
初投稿なので至らない部分が多いと思いますが、疑問点や間違っている部分がありましたら教えていただけると嬉しいです。

現在就活中ですが、どうやら面接の前にプログラミングスキルを測る企業があるらしく、そこではトリボナッチ数列に関する問題が出るみたいです。

そのため本記事では、Rubyを使ってトリボナッチ数列を出したいと思います。
#トリボナッチ数列とは
トリボナッチ数列は[0, 0, 1]から始まり、その後の項が前3つを足したものになる数列です。
“例:[ 0, 0, 1, 1, 2, 4, 7, 13, 24, 44, 81]“
“81 = 13 + 24 + 44“

#トリボナッチ数列で数字を取り出す!
今回は、「n項目」のnに値を入力するとその項の数字が出るようにしていきます。

また、コードを書くにあたって
https://yu8mada.com/2018/06/23/how-to-calculate-fibonacci-numbers-in-ruby/#content-1-4
のフィボナッチ数列のコードを参考に

元記事を表示

[Rails]Action Textでリッチテキストを作ろう!

# はじめに
Rails6で追加されたActionTextにリッチテキストコンテンツと編集機能を導入出来ます。
今までは自分で実装していたので、便利な機能だと思い、使い方を調べてみました!

# 使用方法
1.ActionTextのセットアップを行い、`rails db:migrate`を実行する。

“`bash
$ rails action_text:install

$ rails db:migrate
“`

2.埋め込み画像や他の添付ファイルを扱うため、ActiveStorageのセットアップを行う。

[参考]

https://qiita.com/ren0826jam/items/58bdbaff17581280ee5a

3.使用するモデルにリッチテキストのフィールドを追加する。

“`app/models/message.rb
class Message < ApplicationRecord has_rich_text :content end ``` 4.ビュー側でヘルパーメソッドを使用する。 ```ruby <%= form_with(model:

元記事を表示

each_with_indexの使い方について

eachループしつつ、それぞれデータに番号を振り分けて全体で何番目という風な記述にしたい場合に何か良いのがないか探してみたところ
便利なeach_with_indexというメソッドを見つけることができましたのでアウトプットがてら紹介したいと思います。

#each_With_indexの使い方

“`ruby.html.erb
<% @users.each_with_index do |user, i| %>
<%= "#{user}は、 #{i+1}位:" %>
<% end %>
“`

“`出力結果
userは(iに1プラスした値)
“`

なおindexは0から始まるため+1にしてますが、初期値の0から始めたい場合は{i}だけで大丈夫です。

元記事を表示

Ruby ヒアドキュメント

##ヒアドキュメントの書き方
複数の文字列を出力したい場合ヒアドキュメントを使うと楽に出力出来ます。

“`
puts <<~a おはよう こんにちは こんばんは a ``` 出力結果 ``` おはよう こんにちは こんばんは ``` 文字列を囲ってるaは同じワード使っていれば記号以外であればOK

元記事を表示

OTHERカテゴリの最新記事