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

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

[Ruby]使えるようにしておくと便利な記法

### はじめに
ずっとC言語使ってきたせいか、書き方もついついC言語で出来る書き方に寄ってきてしまう。
さすがに慣れてはきたものの、たまに忘れてしまうため備忘録として残しておく。

Rubyをちょっと勉強していれば知っていて当たり前のものではあるが。。。

### nilガード”||=”

“`:nilガードの例
def users
@users ||= []
end
“`
“`:nilガードを使わなかった場合
def users
@users || (@users = [])
end
“`
※上記のようなゲッターメソッドの書き方は良く使われるらしい。

### &.
RailsではActiveSupportにtryという似たメソッドがあるため、あまり使われないかも。
レシーバがnilの場合、エラーを吐かずにnilを返す。

“`:&.の例
# objectがnilの場合:nilを返す
# objectがnilでない場合:emailメソッドの結果を返す
object&.email
“`

### %記法
代表的なものとして、%wと%iについて記載する

“`:%

元記事を表示

ActiveRecordで使っているDBの接続情報を調べる

## 手順

1. サーバーが動いていることを確認する
2. `rails c`をする
3. irbの中で下記のActiveRecord〜を入力する

“`sh
irb> ActiveRecord::ConnectionHandling.connection_config
# => {:pool=>5, :timeout=>5000, :database=>”db/development.sqlite3″, :adapter=>”sqlite3″}
“`

## 参考リンク

https://apidock.com/rails/ActiveRecord/Base/connection_config/class

元記事を表示

Rails ~ユーザー機能の実装~

#概要 
Railsを使用したユーザー機能の準備、実装を忘れないようにメモしておく。
#モデルとテーブルの作成
Userモデルとusersテーブルを作るためターミナルへコマンドを実行する。今回はnameとemailの2つのデータをもたせる。
「カラム名:データ型」の部分は図のように複数並べることが可能。
stringとは短い文字列のこと。ユーザー名やメールアドレスといった短い文字列のデータに用いる。
“`rails g model User name:string email:string
rails db:migrate“`
とターミナルへ入力。モデルをジェネレートしますよー。
Userって名前ね。string型のnameってカラムとemailってカラムをください。
データベースに変更を反映させてねーって意味になる。
#dateの保存について
テーブルにデータを保存させるには
① newメソッドでUserモデルのインスタンスを作成
② saveメソッドでuserテーブルに保存
この2つの処理が必要

#バリデーション
“`
validates:email,{uniquenes

元記事を表示

CSS、SCSSファイルの読み込み

## CSSファイルの読み込み
rails newによってアプリケーションを作成した際にはapplication.cssに

“`ruby
*= require_tree .
“`
の記述がある。この記述によって同じディレクトリにあるcssファイルは読み込まれる。
またこのrequireはアセットパイプラインの仕組みによってファイルを読み込む。
アセットパイプラインはcssファイルやjavascriptファイルを一つにまとめて圧縮し処理速度をあげる仕組み。
アセットパイプラインはsprocketsと言うgemによって実装されている。

## SCSSファイルの読み込み
scssファイルはapplication.scssに@importを記述することでscssファイルをインポートする。
この@importはscssのメソッドであり拡張子をscss(application.scss)にしないと使えない。
application.scssからscssファイルをインポートするために使用するメソッドである。

元記事を表示

アプリケーションを作ってみます

自分用メモ

new コマンド実行
rails _5.0.7.2_ new Put.Memo -d mysql
データベースを作成
rails db:create

作るのは単語帳アプリ
最初にデータベース設計をしてみて自分のしてみたいことを整理してみた
機能として
—アカウント機能
—投稿機能
—いいね機能
—検索機能
—意味の部分にurl,画像を描けるようにする
—ランキング機能

![82486AC1-7B32-4DAC-8A93-1D76A94AED99_1_105_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600111/d3d9a033-54ac-3948-16df-67a0c3da17d4.jpeg)

次にフロント実装

topページには
:スクロール機能
:ランキング機能

↑とりあえずこれだけ実装したい
できればタグごとのランキング,ページネーション機能をつけたい

ビューはこんな感じ
単語、意味とurlと画像
で一つの投稿としてこれをランキングで

元記事を表示

can’t find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)が起きた時に試したこと

#can’t find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException)が起きた時に試したこと

rspec勉強のためにgit cloneしてテストコードを書いていこうと思った矢先に上記のエラー文を吐き出しbundle updateができなくて、ちょっと詰まったので同じところで躓かないようにするためにメモしておく。

##原因
Gemfile.lockで記述されているbundleのバージョンと実際にインストールされているバージョンが違ったため上記のエラーが発生していた。

##問題解決のために行ったこと
1.Gemfile.lockのbundleのバージョンを確認
 ⇨cd [railsのプロジェクト] で対象のrailsプロジェクトに移動する
 ⇨vi Gemfile.lockとターミナルに記述する

“`
BUNDLED WITH
1.14.6
“`
⇨上記のような記述があるためこのバージョンにあったbundleをインストールしなければならない

2.既存のbundleをアンイ

元記事を表示

prefixを正確に調べた

#prefixの認識レベル
ミニブログを作っている最中、ふとprefixについて考えた時に
「パスを代入する変数」というレベルでしか認識していなかったので
詳しく理解するために調べてみた。

#【詳しく調べたかったポイント】

①prefixを使用するメリット(必要性。パス記入の方が分かりやすくない?)
②普通にパスを記入する事との使い分け

#調べてわかった事

###まず第一に、prefixはRailsが推奨している記述方法らしい。
“`
tweet_path
“`
でパスの指定完成。

####①prefixを使用するメリット(必要性。パス記入の方が分かりやすくない?)について
→結論あまりないらしい。
 1,Railsが推奨している
 2,シンプルで直感的に分かりやすくなる(?)

というのが使用している理由らしい。

####②普通にパスを記入する事との使い分け
→開発現場による。「こんな時はprefix!!」みたいなのはないっぽい。

#結論

####僕は普通にパスを書く方が好き。

「私はprefix派!」「prefixにはこんなメリットがあるぞ!」
とい

元記事を表示

Sass::SyntaxError in Devise::Registrations#new 解決方法 

# 前提条件
・gemfileに使いたいパッケージを記述している

“`ruby:Gemfile
gem ‘devise’
“`
・ターミナルで`bundle install`が済んでいる

#エラー内容
[![Screenshot from Gyazo](https://gyazo.com/baf646c7015789692e427e05c5d0bcac/raw)](https://gyazo.com/baf646c7015789692e427e05c5d0bcac)

どうやら`@import “modules/user”`でうまく’_user.scss’が読み込めてないみたいです

_user.scssを動かしてみます

[![Screenshot from Gyazo](https://gyazo.com/3312129d7e24ff4d79d97754578abde5/raw)](https://gyazo.com/3312129d7e24ff4d79d97754578abde5)

ここから

[![Screenshot from Gyazo](https://g

元記事を表示

Railsからデータベースを参照(集計)するときの書き方

###前置き?
ビューを作成する前に、railsコントローラにおいて、データーベースの値を取ってくる場合にどのように記述するのか。今回はgroup by してからのカウントした値を取得する場合のRailsの書き方を調べるのに随分苦労したので、残しておく。

###前提条件

JavaScriptで作成したタイピングゲームをRuby on Railsにのせようとしている。
集計が必要か?ってなったのは、タイピングした結果をランキング表示させようと思い立った時に、問題別のランキング表示をする前に、問題別にどれだけチャレンジャーがいたのか、っていうのを先に一覧表示した後で、ランキング表示をしようか、と思ったから。

###テーブル

|Qfiles|
|—|
|id|
|title|
|category|
|results_count|
|その他|

|Results|
|—|
|id|
|user_id|
|qfile_id|
|その他|

###出そうとした値

1. 「Qfile辺りのResultを残したuser_id数」
2. 「Qfile辺りのResultを残した数」

元記事を表示

褒められて伸びる自分のためにポジティブなツイートしか表示されないエゴサーチツールを作った話

## はじめに
世の中にアウトプットを出したら他人の反応は気になるもの。長文ブログを書いたときだったり、頑張って開発したサービスをリリース出したときだったり。みな、ツイッターでエゴサーチをしていますよね。

他人からの反応はポジティブなものからネガティブなものまで様々あるかと思いますが、人間誰しも褒められたらやっぱり嬉しいものです。逆に、ネガティブなツイートも貴重な意見と分かっているものの、見るのは勇気がいりますよね。

その気持ち、とっても分かります。

ということで、**ポジティブなツイートしか表示されないエゴサツール**を作ってみました?

なお、ドMの方はポジティブをネガティブに置き換えれば「ネガティブなツイートしか表示されない」ことも可能なので、安心してこのままお読みください。

## まずは動かしてみよう
Webアプリケーションとして作ったのですが本記事では簡単のためrubyプログラムのみご紹介します。試しに私の大好きな「サウナ」で検索した結果がこちらです。

“`ruby:サウナを検索した例
$ ruby twi_posi_search.rb “サウナ”
ポジティブ度数

元記事を表示

【初心者】長めのモデル名(スネークケース)からfindとかをする

#コンソールでモデルから値を取得しようとしたとき
知らずにスネークケースでモデルを指定してエラーになっていたので調べました。
おそらく初心者や始めたばかりの頃は`User`モデルとか`Post`モデルなどしか扱わないので悩まないと思います。。
そもそもスネークケース、キャメルケースとは?という方へ。

#UserとかPostとかの短いモデル名のとき

“`
User.find(1)
“`
簡単に取得できますね。

#長めのモデル名のとき
####キャメルケースとスネークケースとは

“`
CustomerOrder
“`
キャメルケース(大文字部分がラクダの背中っぽい)
CとOが大文字

“`
customer_order
“`
スネークケース(ヘビっぽい)
単語と単語のつなぎ目に_が使われている

#モデルから値を取得

“`
CustomerOrder.find(1)
“`
で取れます。(キャメルケース)

“`
Customer_order.find(1)
“`

スネークケースでは不可。

元記事を表示

RailsのViewからVue.jsのModalを表示させてみた

画像のように、一覧画面で`詳細を開く`ボタンで詳細画面を開くときに、Railsのviewは使用せずVue.jsのModalで表示することを試みた。
何とか実装出来たが、JSはjQueryから入門したこともあり結構大変だったのでメモとして残しておく。
スクリーンショット 2020-03-10 19.41.40.png

# 環境
Ruby 2.6.5
Ruby on Rails 6.0.0
Vue.js 2.6.11

ここではRailsやVueの設定は省略し、Railsのwebpackerでvueのインストール、セットアップが完了していることを前提として書いていく。

# やりたい事
冒頭の通り、`詳細を開く`ボタンをクリックしたときに詳細画面をVue.jsのModalで開きたい。
しかし、今までRailsの中でV

元記事を表示

Rails 〜コメント投稿の削除・編集機能について〜

# 概要
Railsで作成したコメントの削除・編集機能についてまとめる。

# 投稿の編集
投稿の編集については
① 編集したい投稿の取得
② その投稿のcontentの値を上書き
③ データベースに保存
この3つの処理が必要である。
“`post=Post.find_by(id:1)
post.content=”コメント”
post.save“`
これらの処理が必要

##ビュー
HTMLに記載するコード
“`<%=link_to("/posts/#{@post.id}/edit")>
“`
link_to + editアクションのURLを指定
##ルーティング
“`get “posts/:id/edit”=>”posts#edit”
“`
編集したい投稿のidをURLに含む

updateアクションについて
フォームの値を受けとるのでルーティングはgetではなくpostにする必要あり。また特定のidの投稿を更新するためURLにidを含む。投稿編集から投稿一覧ページにリダイレクトさせるのでビューは不要。

##編集したものを上げる処理のルーティング
“`post

元記事を表示

#Ruby で自前クラスのインスタンス同士で同値性チェックを実装するには == ===イコールメソッドを定義すれば良いかね?

– 強制的に同値の評価を真にしてしまう場合。別のクラスのインスタンスだろうとなんだろうと常に「同値だ!」と言い張るクラスを作ってみる。実用的には特に意味なし。
– Aのインスタンスが同値評価をしようとすると、常に true を返す。(特に意味はありません)
– 有意な同値評価を実装してみてください。

“`rb
class A
def ==(instance)
true
end

def ===(instance)
true
end
end

class B
end

A.new == B.new
# => true

A.new === B.new
# => true

B.new == A.new
# => false

B.new === A.new
# => false
“`

== と === だけ再定義可能みたいだ

[Rubyにおける==,===,eql?,equal?の違い – ぬいぐるみライフ?](https://mickey24.hatenablog.com/entry/20100910/1284052782)

# Or

元記事を表示

[Rails, jQ]インクリメンタルサーチ

#インクリメンタルサーチ
本記事では前回作成した[ユーザーの名前検索機能](https://qiita.com/Masanori_N/items/5065bc59d9dff88d5152)を使用して実装していきます。
以下を使用しています。

– ruby 2.5.1
– rails 5.2.4.1
– gem ‘jquery-rails’
– gem ‘devise’

なお、使用するビューは以下を使用します。

““`erb:index.html.erb
<%= form_with(url: users_searches_path, local: true, method: :get, class: "search_form") do |f| %>
<%= f.text_field :keyword, placeholder: "Name", class: "search_input" %>
<%= f.submit "Search", class: "search_btn" %>

<% @users.each do

元記事を表示

Rubyの通信処理におけるopensslのエラー

## ■ 背景
Slack通知が来なくなったので気づいたのですが、Ruby使って実行しているBatch処理における通信部分がコケていたのでその原因調査したメモです。

## ■ 目次

1. 環境
2. 事象
3. やったこと
4. まとめ
5. 参考サイト

## ■ 内容
### 1. 環境

“`bash
$ rbenv -v
rbenv 1.1.2-26-gc6324ff
$ rbenv versions
system
* 2.5.1 (set by /Users/y-agatsuma/.rbenv/version)
$ bundler -v
Bundler version 1.16.2
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin18]
$ bundle exec gem list | grep slack
slack-incoming-webhooks (0.3.0)
“`

### 2. 事象

“`
SSL_connect returned=1 errno=0 state

元記事を表示

Cancancanを使っているときのtest

## Cancancanとは?
この記事を見て下さっているということは既にご存知だと思いますが、 **権限管理のgem** です。

## Cancancanを使っているときのテストはどうしたらいいのか?
権限があるときは、権限を持つテストユーザーでログインして

“`Ruby
test “test#indexにmanager権限を持つユーザーがアクセスして、正常レスポンスが返されること” do
# manager権限を持つユーザーでログイン
login(:yama_p)

get tests_path
assert_response :success
end
“`
正常に処理ができることを確認すればまぁいいかも知れませんが、 **アクセスできない(権限がない)ことを確認する** にはどうしたらよいでしょうか?
というのも、上記で `assert_response :errors` などとしてもcancancanで弾かれたときにエラーが返ってくるわけではなくそもそもアクセスできないので

“`
CanCan::AccessDenied: You are not a

元記事を表示

シンボルとは

# シンボルとは

Symbol とは、Ruby が内部でメソッド名などの識別に使っている数値で、任意の文字列に対して異なった値が割り当てらる。

なるほど、よく分かりませんね。

つまり、文字列だけど数値。みたいなものです。ハッシュのキーや文字列自体がデータでは無い物に使うことが吉です。

# 前コロンと後コロンの違い

シンボルとは主に文字列にコロン記号「:」を前置して定義したものです。

それにより、文字列を””で囲む必要がなくなります。

コロン記号「:」が、文字列記号「””」の代わりに、「これはシンボルだよ」とRubyに知らせています。

上記のように、コロン記号「:」を文字列に前置するとシンボルになります。

たとえば、ハッシュのキーとしてシンボルを使う際や、キーワード引数を使う際に、コロン記号「:」を後置します。

# シンボルはオブジェクトの一つ

メソッドなどの名前を識別するためのラベルをオブジェクト化

“` ruby
samurai /*文字列
:samurai /*シンボル

“`

# ハッシュのキーとして利用する
よく使われるのが、ハッシュのキー

元記事を表示

備忘録(TX50)シンボル型の説明

Rubyでは:(コロン)で始まるシンボルと呼ばれるものがありますが、これはどういったものか、またシンボルを使うことのメリットは何か解説してください。

A
Rubyの内部では整数として管理されているが、文字列のように呼び出せるオブジェクト。同じシンボルであれば同一のオブジェクトを参照するので、いくつ作成しても必要なメモリ容量は変わらない。また、文字列よりも高速に処理することができる。

Q
tweet = Tweet.new(tweet_params)
if tweet.save
some_method(tweet)
end

Railsアプリケーションではバリデーションに引っかかると保存がされない仕組みがあります。以下のコードで、保存されるべきtweetがなぜか保存されずロールバックされてしまう場合、どうすればその理由を確認できるか説明してください。

①1行目と2行の間にbinding.pryを記載し止める。
②pryの中で、tweet.saveを実行する。
③tweet.errorsを実行すると保存の際に出たエラーの内容が表示される。

元記事を表示

Sinatraを使ってHeroku drainログをTDへ送るAppを作った時にハマった記録

#はじめに
Heroku drainからhttp経由でログを取得し、TDへ送るアプリをsinatraで作っていた時ハマった時のことを記録として残す。
Heroku drainからログをpostで受け取る形式のアプリを作った。(Sinatraは初めて)
#最初はクラシック形式で作成。
“`app_main.rb
require ‘sinatra’
require ‘sinatra/reloader’ if development?
require ‘td’
require ‘date’
TreasureData::Logger.open(‘DB名’,
:apikey=>ENV[‘TD_API_KEY’],
:auto_create_table=>true)
post ‘/’ do
・・・ requestの内容をパースする処理 ・・・
 TD.event.post(‘テーブル名’,{送るデータ})
end
“`
ここで一つ注意点。
・TreasureData::Logger.openはpostのなかに記述してはいけない
理由は簡単。 postされるたびTreasureD

元記事を表示

OTHERカテゴリの最新記事