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

Ruby関連のことを調べてみた2020年04月06日
目次

Rails_Twitter風いいね機能のエラーについて

Railsで開発中のTwitter風いいね機能のエラーについてで質問です。

いいね、のボタンを押すと画像の様にエラーが出てしまいます。
原因については送信するidを受け取れないというよりはidを送っていない?と思うのですが色々やって見てもエラー祭りでどうなってるんだ。。。という状況です。
送信
https://i.gyazo.com/2ffbf11501a88d1ab5b1592b672ba33e.png
controller
https://i.gyazo.com/e5865d77d53d90f80f224fcfb3cab0da.png
エラー
https://i.gyazo.com/188748a8c789e4c870172d345c304466.png

初心者のため稚拙な説明で申し訳ございません。
よろしくお願い致します。

元記事を表示

Rubyのクラスがモジュールをinlcudeする時の参照順を実験してみた

# 確認したいこと
同名のモジュールが複数の名前空間に存在する時のincludeの参照順

# 実験

“`ruby

module TalkActions
def say_my_name ###(1)
puts “I am #{@name}[outside]”
end
end

class Human
module TalkActions
def say_my_name ###(2)
puts “I am #{@name}[inside]”
end
end

include TalkActions ###(1),(2)のどちらをよみこむか?
def initialize(name)
@name = name
end
end

John = Human.new(“John”)
John.say_my_name ### I am John[inside] (2)だった
“`

* 一応insideをコメントアウトして実行

“`ruby

module TalkActions
def say_my

元記事を表示

Rubyのモジュールのインスタンスメソッドの挙動を実験してみた

# 確認したかったこと
モジュールのインスタンスメソッドからinclude元のクラスのインスタンス変数/メソッドを呼び出すことは可能か?

# 実験

“`ruby

module TalkActions
def say_my_name
puts “I am #{@name}”
end

def shout_my_name
puts “I am #{self.name}!!!!!!!!”
end
end

class Human
attr_accessor :name
include TalkActions
def initialize(name)
@name = name
end
end

John = Human.new(“John”)
John.say_my_name # ‘I am John’
John.shout_my_name # ‘I am John!!!!!!!!’

“`

# 結論

どちらも呼び出し可能

元記事を表示

Rubyのクラスにおける@とselfの整理

基本的に、@はインスタンス変数を、selfはメソッドを呼び出す。ただし、attr_accessorで指定したインスタンス変数に関してはselfで呼び出せる。

# その心は…

`attr_accessor hoge`は、インスタンス変数`hoge`のアクセッサとして`hoge`, `hoge=`メソッドを定義する。

元記事を表示

@keymoon氏の【全方位木DP】のRuby実装

[【全方位木DP】明日使える便利な木構造のアルゴリズム](https://qiita.com/keymoon/items/2a52f1b0fb7ef67fb89e)
上記事の Ruby への単なる移植です。

##コード

“`ruby:Ruby
class ReRooting
def initialize(identity, operate, operate_node)
@identity = identity
@operate = ->(a, b) {[a, b].__send__(operate)}
@operate_node = operate_node
end

def rerooting(node_count, edges)
@node_count = node_count

@adjacents = Array.new(@node_count) {[]}
@index_for_adjacents = Array.new(@node_count) {[]}

edges.each do

元記事を表示

Kinx ライブラリ – String

# String

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。言語はライブラリが命。ということでライブラリの使い方編。

今回は String です。

* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* 個別記事へのリンクは全てここに集約してあります。
* リポジトリ … [https://github.com/Kray-G/kinx](https://github.com/Kray-G/kinx)
* Pull Request 等お待ちしております。

文字列操作の基本インターフェース。String オブジェクトに括り付いたメソッドは特殊メソッド(と呼ぶメソッドがある、名前は今決めた)扱いで、文字列オブジェクトに直接作

元記事を表示

【Ruby】puts,p,printメソッドの違い

**puts、p、printメソッド**について、違いが分からなかったので調べてみました。

***
**putsメソッド**

-改行**あり**
-引数のオブジェクトを**文字列**に変換して出力

“`ruby:putsメソッド

puts “あけまして、そらじろう”
puts 20200405
“`
“`ruby:ターミナル
あけまして、そらじろう
20200405
“`

***

**pメソッド**
-改行**あり**
-引数と引数の**文字型(文字列や数値)**も出力

“`ruby:pメソッド
p “あけまして、そらじろう”
p 20200405
“`
“`ruby:ターミナル
“あけまして、そらじろう”
20200405
“`
***

**printメソッド**
-改行**なし**
-数のオブジェクトを**文字列**に変換し出力

“`ruby:printメソッド
print “あけまして、そらじろう”
print 20200405
“`

“`ruby:ターミナル
あけまして、そらじろう20200405
“`

***

*追記*
pu

元記事を表示

Dockerを使ってrailsのAPIモードの環境構築

### はじめに
今回は、Dockerを使ってRailsのAPIモードの環境構築をしていく記事です。
コマンド、設定などを詳細に書いていきます。

記事の最後までの所要時間は30分以内です。意外と簡単でした。

### APIモードとは
APIモードとはRails5から追加された機能で、APIのようなRailsアプリケーションを作れる機能だそうです。

MVCのうち、モデルとコントローラーのみが作成されます。

APIモードで作成されたアプリのURLにリクエストを送ると、json形式のデータがレスポンスとして返ってきます。

### 環境構築
では、環境構築をしていきます。

“`zsh
$ mkdir sample_app
$ cd sample_app
$ docker pull ruby:2.5.1
$ docker run –rm -v “$PWD”:/usr/src/sample_app -w /usr/src/sample_app ruby:2.5.1 bundle init
$ docker build -t developer_name/sample

元記事を表示

[Rails]画像選択時にプレビュー表示

#本記事投稿のいきさつ
アプリの中で画像投稿機能を実装したとき、ただフォームを作成するだけでは画像を選択しても表示がされず何を選んだのか確認をすることが出来ません。
そこで、画像を選択した時点でプレビュー表示することができればいいなと思い、実際に機プレビュー機能を作成したため、記録として残したいと思います。
今回はユーザーのプロフィール画像の編集画面を想定します。
そのため、既に登録されている画像は最初からプレビューさせた状態で表示をさせます。

## 前提

– 変種画面はprofile_edit.html.haml
– 画像の保存先は Usersテーブル: imageカラム
– file_field本体は隠し、画像が選択されていない時はiconを、
選択されている時はプレビュー画像をクリックすることで画像選択できるようにします。
– jQueryを使用しますが、必要なGemのインストール等は既に出来ているとします。
– ユーザー機能はDeviseを使用しています。
– cssは今回の内容に含まれません。

##フォーム作成
まず、今回はhamlでビューのフォームを作成します。

`

元記事を表示

gem annotate の README を翻訳しました

# 概要
gem [annotate](https://github.com/ctran/annotate_models) の [README](https://github.com/ctran/annotate_models/blob/develop/README.md) を翻訳しました。

## Annotate (aka AnnotateModels)

下記のファイルの上部あるいは下部に現在の DB スキーマを要約したコメントを追加します。

– ActiveRecord models
– Fixture files
– Tests and Specs
– Object Daddy exemplars
– Machinist blueprints
– Fabrication fabricators
– Thoughtbot’s factory_bot factories, i.e. the `(spec|test)/factories/_factory.rb` files
– `routes.rb` file (for Rails projects)

スキーマコ

元記事を表示

undefined method ‘page’ for # が出たときの対処法

#はじめに
gem kaminariについて、新しい発見があったので、記録として残す。

#今回のエラー

“`controller.rb
インスタンス変数 = オブジェクト.page(:params[:page]).per(10)
“`

“`index.html.haml
= paginate インスタンス変数
“`

と定義したところ、エラーが出た。

エラー文

“`
undefined method ‘page’ for #
“`

**なぜ???**

#実は、、、

私の解釈では、、

“`controller.rb
インスタンス変数 = オブジェクト.page(:params[:page]).per(10)
“`

のつもりだったのが、

“`controller.rb
インスタンス変数 = 配列.page(:params[:page]).per(10)
“`

の間違いだった。

#解決策

kaminariの公式ページを読めばわかるのだが、

通常.pageメソッドはActive Recordのオブ

元記事を表示

rails newするとCould not load command “rails/commands/server/server_command”. Error: uninitialized constant URI::Generic.と表示される時の対処法

#####Vagrantを使って環境構築をしている際、エラーに遭遇したので記録を残しておきます。

## 構築環境

Ruby 2.5.0
Ruby on rails 5.1.7
Vagrant 2.2.7
Virtual Box 6.1.4
rbenv 1.1.2

##発生したエラー
“`
$ rails new
#省略
[WARNING] Could not load command “rails/commands/server/server_command”. Error:
uninitialized constant URI::Generic.
“`

##解決した方法
Rubyのバージョンを2.5.7に上げるとこのエラーは解消されました。

“`
#バージョン2.5.7のRubyをインストール
$ rbenv install 2.5.7
#省略

#使用する全体のrubyのバージョンを指定
$rbenv global 2.5.7

#Rubyのバージョンを確認
$ruby -v
ruby 2.5.7p206 (2019-10-01 revision 67816) [x

元記事を表示

アカウントの有効化〜Railsチュートリアル11章〜

いよいよRailsチュートリアル11章に入っていきます。11章の体感としてはProgateの内容でも少し触った内容であったので割とスムーズにすすめることができました。
それではまとめていきます。

#アカウントの有効化
現時点でのApplicationは新規登録したユーザーははじめからすべての機能にアクセスできるようになっている。
ここではアカウントを有効化するステップを新規登録の途中に差し込むことで本当にそのメールアドレスの持ち主なのかどうかを確認できるようにする。
大まかな流れ
(1)有効化トークンやダイジェストを関連付けておいた状態で
(2)有効化トークンを含めたリンクをユーザーにメールで送信し
(3)ユーザーがそのリンクをクリックすると有効化できるようにする
というものである。

###基本的な手順
1.ユーザーの初期状態は「有効化されていない」にしておく
2.ユーザー登録が行われたときに有効化トークンとそれに対応する有効化ダイジェストを生成する。
3.有効化ダイジェストはデータベースに保存しておき、有効化トークンはメールアドレスと一緒にユーザーに送信する有効化用メールのリンク

元記事を表示

[Rails][data-vocabulary.org スキーマのサポートは終了します。]gem Gretelをschema.orgに対応させる方法。

# data-vocabulary.org スキーマのサポートは終了します。
![スクリーンショット 2020-03-10 11.47.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/814/7f746d33-36d2-7077-afe1-d38d0fcb76b1.png)

2020年4月6日からGoogleで「data-vocabulary.org」を利用した構造化データがリッチリザルトとしてサポートされなくなるので、引き続きリッチリザルトを利用したい場合は「schema.org」を利用した構造化データに移行する必要があります。

>
パンくずリスト  |  Google 検索デベロッパー ガイド  |  Google Developers
https://developers.google.com/search/docs/data-types/breadcrumb?hl=ja

# Gem Gretelとは
Gretel( https://rubygems.org/gems/gretel/

元記事を表示

Ruby で Google Spreadsheets を機械が読み書き

# TL; DR

– Google Spreadsheets の表を Ruby プログラムを使って無人操作する方法を書きました。
– ほぼ [先日書いた Python の記事](https://qiita.com/yagshi/items/3ab2a03b5e55181ec300) の Ruby 版です。
– [公式 Quick Start](https://developers.google.com/sheets/api/quickstart/ruby) は人間が介在する OAuth2 のやり方だけど、ようはこれの無人版です。
– サービスアカウントというものを作って、それに必要な権限を与え、そのアカウントの秘密鍵を使ってアクセスします。

# スプレッドシートの準備

これは何も特別なことはありません。Google Drive に適当なシートを作成して、ファイルの ID だけ控えておいてください。

# プロジェクトとサービスアカウント

各種ドキュメントを操作するには当然権限が必要です。プログラムから操作する場合は、大雑把に言って2とおりの権限獲得の手法があります。

元記事を表示

Ruby と Perl で解くAtCoder ABC 161 D 幅優先探索

# はじめに
*[AtCoder](https://atcoder.jp/home)* の AtCoder Beginner Contest 161 の D問題が解けなかったので、復習を兼ねて投稿しました。

# お礼
オフィシャルの解説やネット上の解説・解答を参照して理解を進めております。
**AtCoder** さん、競技プロプレイヤーさん、ありがとうございます。

# 幅優先探索
幅優先探索といえば、次のようなマップ・迷路問題で使用されます。

“`map
#…#.#
..#…#
.#..#..
“`
所謂、ある地点での上下左右において、**.** だったらキューに追加、**#** だったらキューに追加しない、というふうな解法を行います。

今回の D問題はそれを応用させ、末尾の数字 (仮に 3とします) のルンルン数 (2, 3, 4) をキューに追加することにより解いていきます。

また、マップ・迷路問題ではゴールにたどり着いた時点もしくは、全マップを探索した時点でループを終了しますが、今回は K番目に到達した時点でループを終了します。

# Ruby
*[AtC

元記事を表示

Twitterユーザーの性別を機械学習で予測する

性別がタグ付けされたTwitterユーザー 2万人分のデータがあったので、このデータを使ってTwitterユーザーの性別予測を行ってみた。テキスト処理にはRuby、機械学習にはPythonを使っている。

## 先に結論

Twitterのプロフィールを用いた単純な機械学習による性別予測は、約60%の精度しかでなかった。

今回用いたデータは外国語のデータであり、日本語のプロフィールだと違った結果になるが、精度は同じようにあまりでないと思われる。こう思う理由は、「Twitterユーザーのデータは、そもそも人が見ても性別の判定が難しい」ため。

## Twitterユーザー性別判定の手順

手順1〜5にはRuby、手順6にはPythonを使っている。

1. プロフィールに含まれる単語をリストアップする
2. 各単語の出現回数を記録する
3. 極端に出現回数が少ない、もしくは多すぎる単語は除去する
4. 単語数を次元数とみなしてユーザーのプロフィールをベクトルで表現する
5. 正解データのラベルを作成する
6. 機械学習を適用する

## Rubyでテキストの事前処理を行う

前述の手順

元記事を表示

ユーザーの更新・表示・削除機能を追加します〜Railsチュートリアル10章〜

この章ではユーザー機能を充実させてRESTアクションを完成させます。
この章で行うことは
プロフィールの更新、認可モデルの実装。ユーザー一覧の追加。ユーザーの削除機能を追加していきます。

#ユーザーを更新する
ユーザー情報を編集するパターンは新規ユーザーの作成と似通っている。
ユーザーを編集するためのeditアクションを作成する。
patchリクエストに応答するUpdateアクションを作成する。
またユーザー情報を更新できるのはそのユーザー自身だけであるよう設定する。

まずeditに対応するアクションとビューを追加する。

アクション

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

ビュー

“`
<% provide(:title, "Edit user") %>

Update your profile

<%= form_for(@user) do |f| %>

元記事を表示

Uglifier::Error: Unexpected character ‘`’ Herokuデプロイ時のエラー解消方法

#はじめに
今年の1月末からプログラミングの学習を開始したばかりの初心者です。
今回作成した個人アプリをHerokuでデプロイしてみたのですが、途中で発生したエラー解決について自分用の備忘録として初投稿してみました。

※今回はあくまで発生したエラーの解消法のみをシンプルにまとめています。
Herokuでのデプロイ方法については参考にした記事を最下部に貼っているので気になる方はそちらをご確認ください。

※開発環境
・Ruby 2.5.1
・Rails 5.2.4.2
・heroku/7.39.2 darwin-x64 node-v12.13.0

###エラー内容

Herokuでデプロイ中に以下のようなエラー文言が表示されデプロイに失敗しました。

“`ruby:ターミナル
remote: !
remote: ! Precompiling assets failed.
remote: !
remote: ! Push rejected, failed to compile Ruby app.
remote:
remote: ! Pus

元記事を表示

【Rails】deviseを使用した簡単なログイン機能まとめ

# はじめに
学習中の備忘録です。
# 概要
新規アプリ作成の際にdeviseのコマンドなど忘れるのでまとめ。

– 導入
– devise設定ファイル作成
– モデル作成
– ビューファイル作成
– deviseによって設定されるPrefixの一部

# 前提
rails 5.2.3

# 導入
gemファイルに追記

“`:Gemfile
gem ‘devise’
“`
インストール

“`:ターミナル
$ bundle install
“`

サーバー再起動

“`:ターミナル
$ rails s
“`

# deviseの設定ファイルを作成

“`:ターミナル
$ rails g devise:install
“`
新規作成されるファイル

– config/initializers/devise.rb
– config/locales/devise.en.yml

#モデル作成

“`:ターミナル
$ rails g devise user
“`
新規作成されるファイル

– app/models/user.rb
– db/migrate/20XXXXXX

元記事を表示

OTHERカテゴリの最新記事