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

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

[メモ]Rails超基礎 勉強して個人的に違いが分からなくなったメソッド

##redirect_toメソッド
「redirect_to(URL)」とすることで、そのページに転送することができます。
以下だとcreateアクションを実行すると「/posts/index」ページへ転送される。

“`
def create
redirect_to(“/posts/index”)
end
“`

##renderメソッド

別のアクションを経由せずに、直接ビューを表示することができます。
render(“フォルダ名/ファイル名”)のように表示したいビューを指定します。
renderメソッドを使うと、redirect_toメソッドを使った場合と違い、そのアクション内で定義した@変数をビューでそのまま使うことができます。
以下だとupdateアクションが実行された時、@postにid(例 id:1)を持つデータをデータベースから取り出す。
取り出したデータのcontentカラムデータだけ取り出し@post.contentに格納する。
最後に「posts/edit」というURLに@post.contentという変数をビューでそのまま使うことができる。

“`

元記事を表示

Rubyコーディング規約

#コーディング規約
ルールではなくマナー
僕が気をつけているポイントを紹介するよ!

#インデントは2つ
“`ruby
if num > 0
●●if num < 100 ●●●●puts "100より小さい正の数" ●●end end ``` #クラス内の各構成要素の区切りに空行を入れる ただし、最初と最後は空けない。 ```ruby:tweets_controller.rb class TweetsController < ApplicationController #最初は空けない before_action :move_to_index, except: :index #---ここ--- def index @tweets = Tweet.all end #---ここ--- def new @tweet = Tweet.new end #---ここ--- def create Tweet.create(tweet_params) end #---ここ--- private def tweet_params

元記事を表示

【Rails】RSpecで`visit`が`undefined method`と怒られたときの解決法

## はじめに
Rails+RSpec+Capybaraで書いたテストを実行しようとしたらタイトルのようなエラーが出た方に向けて解決法を残しておきます。

## この記事が役に立つ方
– タイトルのようなエラーで困っている方

## この記事のメリット
– エラー解決!

## 環境
– macOS Catalina 10.15.1
– zsh: 5.7.1
– Ruby: 2.6.5
– Rails: 5.2.3
– RSpec: 3.9.0
– Capybara: 3.29.0

## エラー内容

“`zsh
NoMethodError:
undefined method `visit’ for #
“`

なぜか`visit`が定義されていないことになっている。

## 原因
`Capybara`が読み込まれていないことが原因です。

`visit`は`Capybara`内で定義されているため読み込む必要があります。

## 解決法 その1
以下を追記します

元記事を表示

TataraというRubyで型を使えるライブラリを作ってみた

### はじめに

この記事は最近僕が作っているRubyで型を使えるライブラリの紹介記事です。

対象読者としては、Rubyで簡単に型のようなものを使ってみたい人、またはC++でのRuby拡張を作ってみたい人を想定しています。

Tataraの紹介をしつつ、簡単なC++でのRuby拡張実装についても触れていきます。

### 作ったもの

[Tatara](https://github.com/S-H-GAMELINKS/tatara)というRubyで簡単な型を使えるようにするRubyExtensionを作りました。RubyGemsにもリリースしており、[v0.2.0](https://rubygems.org/gems/tatara)が現在リリースされている最新バージョンになります。

v0.2.0までは[Rice](https://github.com/jasonroelofs/rice)というRubyExtensionを簡単にC++で使用していました。しかし、GCへの管理追加が少しややこしかったり、RiceでC++のコードをRuby向けにラップしているため処理が遅くなったりすると

元記事を表示

正規表現 アンカー

アンカーは幅0の文字列にマッチするメタ文字列です。 幅0とは文字と文字の間、文字列の先頭、文字列の末尾、 などを意味します。 ある特定の条件を満たす「位置」にマッチします。

^ 行頭にマッチします。行頭とは、文字列の先頭もしくは改行の次を 意味します。
$ 行末にマッチします。 行末とは文字列の末尾もしくは改行の手前を意味します。
\A 文字列の先頭にマッチします。
\Z 文字列の末尾にマッチします。 ただし文字列の最後の文字が改行ならばそれの手前にマッチします。
\z 文字列の末尾にマッチします。
\b 単語境界にマッチします。 単語を成す文字と単語を成さない文字の間にマッチします。 文字列の先頭の文字が単語成す文字であれば、文字列の先頭 の位置にマッチします。
\B 非単語境界にマッチします。 \bでマッチしない位置にマッチします。
# 文字列中の real にマッチする
/real/.match(“surrealist”) # => #< MatchData "real">
# 先頭に real とないとマッチしない
/\Areal/.match(“surrealist”)

元記事を表示

正規表現 キャプチャ

丸括弧 ( ) によってキャプチャをすることができます。 括弧に囲まれた部分正規表現にマッチした 前からn番目の開き括弧によって囲まれた部分式にマッチした 文字列を後で参照することができます。

正規表現内では \1, \2, … という記法で後方参照できます。 また、\k<1>, \k<2>, … や \k’1′, \k’2′, … という記法を使うこと もできます(10を越える数字を渡すことができます)。 また、Regexp#match で得られた MatchData からは MatchData#[ ]で取り出せます。

また、$1, $2, … という特殊変数によって n 番目の括弧にマッチした 部分文字列を参照できます。これらの特殊変数はマッチ処理が終わったあとで しか使えないことに注意してください。

 # (..) に at がマッチしたのを \1 で参照し、マッチが成功している。
m = /[csh](..) [csh]\1 in/.match(“The cat sat in the hat”)
 # => #< MatchData "cat sat in

元記事を表示

正規表現 繰り返し

以下のメタ文字列は繰り返しを表現します。 直前の部分式を何回繰り返すかを指定します。このような繰り返しを 表すメタ文字列を量指定子(quantifier)と呼びます。
 
* 0回以上
+ 1回以上
? 0回もしくは1回
{n} ちょうどn回(nは数字)
{n,} n回以上(nは数字)
{,m} m回以下(mは数字)
{n,m} n回以上m回以下(n,mは数字)
以下の例で、量指定子の基本的な使いかたを示しています。

 # 以下の正規表現は 最初に大文字が1文字以上(H)で、小文字が1文字以上(l)、
 # lが2文字(ll)の後ろにoが続く文字列にマッチします。
“Hello”.match(/[[:upper:]]+[[:lower:]]+l{2}o/) # => #< MatchData "Hello">
これらは「欲張り(greedy)」にマッチします。 マッチが成功する、最長の文字列にマッチしようとします。 そのため、これらの量指定子は特に最大量指定子(greedy quantifier) と呼ばれます。

最小量指定子(reluctant quantifier)
一方、以下

元記事を表示

正規表現 文字クラス

文字クラス(character class) とは角括弧 [ と ] で囲まれ、1個以上の文字を列挙したもので、 いずれかの1文字にマッチします。

/W[aeiou]rd/
は Ward, Werd, Wird, Word, Wurd のいずれかにマッチします。

文字クラス内のハイフン(-)は文字の範囲を表すメタ文字です。 例えば [abcd] という文字クラスは [a-d] と表すことができます。 複数の範囲指定をすることもできます。例えば [abcdpqrs] は [a-dp-s]と 表すこともできます。

文字クラスの [ の直後の文字がキャレット(^)である場合、列挙「されていない」 文字にマッチするようになります(これは否定文字クラスと呼ばれます)。

[^a-d]
はabcd以外の1文字にマッチします。

文字クラス内に別の文字クラスを含めることができます。 [a-z[0-9]] は [a-z0-9]と同じ意味を持ちます。これだけではあまり意味が ありませんが、文字クラスは && という、共通部分を取る演算をサポートして いるため、これと組合せることで意味を持ちます。

元記事を表示

正規表現 文字

正規表現内では、「\」の後に文字列を置くことで、 ある特定の文字を表現することができます。 これは、改行のように Ruby の文法で特別な意味を持つ文字を埋め込む ためなどに用いられます。 文字列リテラルの記法とほぼ同様(リテラル/バックスラッシュ記法)で、 以下の記法が利用可能です。

\t 水平タブ horizontal tab (0x09)
\v 垂直タブ vertical tab (0x0B)
\n 改行 newline (0x0A)
\r 復帰 return (0x0D)
\b バックスペース back space (0x08)
\f 改ページ form feed (0x0C)
\a ベル bell (

元記事を表示

正規表現 式展開

正規表現内では、#{式} という形式で式を評価した文字列を埋め込むことが できます。

place = “東京都”
/#{place}/.match(“Go to 東京都”) # => #< MatchData "東京都">
埋め込んだ文字列にメタ文字が含まれているならば、それは メタ文字として認識されます。

number = “(\\d+)”
operator = “(\\+|-|\\*|/)”
/#{number}#{operator}#{number}/.match(“43+291”) # => #< MatchData "43+291" 1:"43" 2:"+" 3:"291">
埋め込む文字列をリテラルとして認識させたい場合は Regexp.quote を 使います。

元記事を表示

正規表現 メタ文字列とリテラル、メタ文字とエスケープ

正規表現の文法には、正規表現内で特別な働きをする文字列と、それ以外の その文字列そのものにマッチするような文字列があります。 前者をメタ文字列(meta string)、後者をリテラル(文字列)(literal string)と呼びます。

/京都|大阪|神戸/
という正規表現においては、「京都」「大阪」「神戸」がリテラルで、 2つの「|」がメタ文字列です。

以下の文字は「メタ文字」(meta character) と呼ばれる、正規表現内で特殊な働きをする文字です。

( ) [ ] { } . ? + * | \
これらの文字をリテラルのようにその文字としてマッチさせるためには、 バックスラッシュ「\」を前に付けます。「\\」はバックスラッシュ1文字に マッチします。

メタ文字以外の文字も、メタ文字に続けて置くことで特別な働きをするよう になる場合があります。つまりメタ文字列を構成します。例えば

/[a-z]/
/\Axyz\Z/
という正規表現において “[a-z]”, “\A”, “\Z”はメタ文字列です。

元記事を表示

【Rails】ログイン機能を実装する

[TODO](https://qiita.com/d0ne1s/items/5e63dde992f20f25b8bb)アプリにログイン機能を実装します。

・[【Rails】バリデーションを実装する](https://qiita.com/d0ne1s/items/822f66d16d65ae28162b)
・[【Rails】パーシャルを利用する](https://qiita.com/d0ne1s/items/154a5faa5ae09466e637)

##Userモデルを作成
`name`、`email`、`password_digest`という属性を持つUserモデルを作成します。`password`ではなく、必ず`password_digest`という属性を設定してください。

“`terminal
$ rails g model User name:string email:string password_digest:string
“`
“`terminal
$ rails db:migrate
“`
##ハッシュ化したパスワードで認証ができるようにする
パスワードを

元記事を表示

Excelって名前しか知らないPCに不慣れな感覚派22歳プログラミング完全未経験者がRubyを習得するまでの軌跡。

22歳プログラミング完全未経験者の学習記録と感じたことや疑問点、理解に至った知識をまとめる。

目標

①プログラミングって何の状態から1つでいいから言語を習得し自分にとって面白いと感じる分野なのかを見極める。
②twitchの拡張機能をつくる
③誰かが必要なプログラムをつくることは難しい、まずは自分に必要なプログラム、こんなのがあれば素敵だなと思うものを実体化させる能力を身につけたい!

取り組む際に感じていること

①数学的な知識がないとまったく理解できないのではないか?(数学はニガテな方だ)
②はじめはピアノのバイエルン、武道でいう型のようなものが多く飽きてしまうのではないか? 
③自分が今やってることがなんの役に立つのかイメージがわきづらく感情の波に溺れそうになる。
④自分がこうしたいああしたいという脳内のイメージを実際に実体化させられるのか
⑤プログラミングができたら魔法使いのようでかっこいい。

学習計画

プロゲート → プロを目指す人のためのRuby入門 → 未定(railsの前にwebの方で勉強しなきゃいけないことがあるらしいからそっちの方)

学習する

元記事を表示

10進数でも2進数でも8進数でも逆から読んで同じになる回文数(Ruby)

##回文とは
世の中ね、顔かお金かなのよ…
(よのなかねかお か おかねかなのよ)
のように上から読んでも下から読んでも同じ言葉を回文と言います。

| 10進数 | 2進数 | 8進数 |
|:———-:|:———:|:——–:|
| 0 | 0 | 0 |
| 1 | 1 | 1 |
| 2 | 10 | 2 |
| 3 | 11 | 3 |
| 4 | 100 | 4 |
| 5 | 101 | 5 |
| 6 | 110 | 6 |
| 7 | 111 | 7 |
| 8 | 1000 | 10 |
| 9

元記事を表示

Railsのconfig.eager_loadの影響によるエラーについて

自身への注意喚起と同じところで躓いてしまった人がいたらすぐ解決できるように、メモします。
# 起こった問題
以下のようなcontrollerとviewがあります。(管理者一覧画面)

“`ruby:sysadmin_users_controller.rb
class SysadminUsersController < ApplicationController def index @sysadmin_users = SysadminUser.order(updated_at: :desc) end end ``` ```ruby:index.html.slim = "#{@sysadmin_users.count}件" table thead tr th | 氏名 th | メールアドレス th | 最終更新日 tbody - @sysadmin_users.each do |sysadmin_user| td = sysadmin_user.name td = sysadmin_user.email td = l(sy

元記事を表示

Rails 5 アプリのherokuへのデプロイ手順

#環境
Rails 5.0.7.2
Ruby 2.6.3

#herokuへのデプロイ手順
1. heroku にアプリを作成(すでにherokuにログインしていると仮定)
– “`$ heroku create herokuアプリ名“`
3. 本番環境用にGemfile, database.ymlを変更
– Gemfilm: Postgre SQLとRailsを連携させる
– database.yml: DBをPostgreSQLに設定
4. 下記を追加,実行し,本番環境へ反映
– 本番環境上でアセットパイプラインを通るようにプリコンパイル処理を実行する
– “`config/environments/production.rb config.assets.compile = false“`
– 本番環境上でアセットパイプラインを自動で通るように設定を変更する
– “`$ rake assets:precompile RAILS_ENV=production“`
– 試したい場合は,以

元記事を表示

Ruby Net::SSHで多段ssh(ポートフォワード/トンネリング)をプログラマブルにやる

## Goal

– sshをプログラマブルにやる
– 踏み台サーバ経由でsshする
– **秘密鍵をメモリ上におき、ディスクにおかなくていいようにする**
– (おまけ)最後にspecinfra, itamaeをこの方式でつかえるようにする

## Motivation

秘密鍵の管理がややこしい。案件が増えるにつれてどんどん増えていく。踏み台サーバの鍵と目的サーバの鍵が異なることもあり、サーバ構築時(ユーザ作成前)と構築後でつかう鍵が異なることもある。鍵を担当者に共有するのもややこしい。

少なくとも自分でコントロールできる案件については、構築に関係する鍵をプログラマブルに管理し、構築自体動的にやりたいと思うようになった。

## Mechanism

### key_data

ふつうコマンドラインのオプションでは`-i`など、鍵の**パス**を指定するのが一般的だが、`Net::SSH`には `key_data` というオプションで、**文字列**で直接秘密鍵を指定する仕組みがある。 [^1] これをつかえば、秘密鍵をディスク上に保存することなくsshできる。

“`ruby

元記事を表示

Rails5 heroku にS3を使ってアップロードしたときに発生するエラー 403 Access denied の対処法

#背景
S3にあるリソースはデフォルトでは外部からアクセスできないようになっている.
Heroku上で動いているアプリで画像をアップロードしても,403 errorではじかれて,表示できない.

#やったこと
##パブリックアクセス設定を一度すべてオフにする
![Screen Shot 2019-11-24 at 4.20.26 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253006/21491002-2a4e-253f-c904-b70f212edc96.png)

##バケットポリシーを作成
アクセス権限→バケットポリシーを選択すると,編集画面になるので,以下の内容を書く.
![Screen Shot 2019-11-24 at 4.25.42 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253006/5e8fc8fb-e32e-54db-51e3-9524a11cefb7.png)

“`
{

元記事を表示

【RSpec3.9】苦手意識克服!一番シンプルな文法で簡単なテストを書いて理解してみよう

## はじめに
これからRSpecを導入しようとされている方の中で、

– テストに対する**抵抗感をなくしたい**
– まずは**簡単なテストの書き方を知りたい**

という方向けに書きました。

RSpecの**超基本文法**とそれを使ったテストの例を以下4つの視点で1つずつ掲載しています。

1. Model
1. Controller
1. View
1. Routing

参考になれば幸いです。

【参考にさせて頂いた記事】
[使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」 – Qiita](https://qiita.com/jnchito/items/42193d066bd61c740612)
[使えるRSpec入門・その2「使用頻度の高いマッチャを使いこなす」 – Qiita](https://qiita.com/jnchito/items/2e79a1abe7cd8214caa5)
[使えるRSpec入門・その4「どんなブラウザ操作も自由自在!逆引きCapybara大辞典」 – Qiita](https://qiita.com/jnch

元記事を表示

RSpecに画像ファイルアップロードのテストを通す

#FactoryBotとCarrierWaveを使ってRSpecに画像ファイルアップロードのテストを通す
備忘録

FactoryBotとCarrierWaveを使ってRSpecに画像ファイルアップロードのテストを通す方法

##環境
ruby 2.6.3
rails 5.2.3
carrierwave
FactoryBot-rails

1.spec内にfixturesディレクトリを作成

2.model内のimageuplorderの記述があるか確認

3.FactoryBot内でpictureアップローダを呼び出す

“`factories/feed.rb
FactoryBot.define do
factory :feed do
title { ‘タイトル’ }
content { ‘投稿内容’}
picture { Rack::Test::UploadedFile.new(File.join(Rails.root, ‘spec/fixtures/rspec_test.png’)) }
user
end
end
“`

###

元記事を表示

OTHERカテゴリの最新記事