- 1. 学んだイディオム
- 2. シンボルについて詳しく
- 3. AWS Cloud9の環境構築 Rubyを最新の安定版にアップデートする
- 4. [Rails]ECサイトのカート機能
- 5. Rubyの『クラス』関係の問題を集めてみて解いてみた。
- 6. 【Rails・MySQL】Mac環境構築
- 7. AtCoder Beginner Contest 169 A,B,Cまでをrubyで
- 8. スコープについてのメモ
- 9. 【Rails】gemのgoogle-cloud-visionでv1.0が出たので対応してみた
- 10. Rails Tutorial 第6版 学習まとめ 第2章
- 11. プログラム基礎知識を勉強する際の考え方
- 12. 【Error】編集後に画面遷移しない事象の解消法
- 13. form_with scope
- 14. HerokuにBugsnagを導入
- 15. 初心者向けRailsでブログを作ってみるチュートリアルその1
- 16. 道のりは長い…( ´Д`)y━・~~ MySQLが起動しない事象への対応
- 17. macOSをバージョンアップしたらrails s出来なくなった
- 18. Rspecでwebmockを使う
- 19. capistranoで構築した環境でassetsの中身を1から作り直したい
- 20. 「多段階選抜」の問題をRubyで解いてみた
学んだイディオム
###||=を使った自己代入
x ||= Aのコードを見たら、「変数Xがnilまたはfalseなら、AをXに代入」と解釈する“`ruby:
limit = nil
limit ||= 10
limit #=> 10limit = 20
limit ||= 10
limit #=> 20
“`
n += 1 がn=n+1と展開できるのと同じ要領で“`ruby:
limit ||= 10
limit = limit || 10
#同じ意味になる。
“`
###!!を使った真偽値の型変換
!は否定の演算子
例
!Aと書いた場合
Aが真であればfalse
そうでないならばtrue“`
!true #=> false
!!true #=> true!!1 #=> true
!!false #=> false
!!nil #=> false
“`使用例
“`ruby:
def user_exists?
#データベースなどからユーザを探す(なければnil)
user = find_user
if user
シンボルについて詳しく
###シンボルを作成する上での注意点
“`ruby:エラーが出る書き方
#識別子として無効な文字列(数字で始まる、ハイフン、スペースを含む文字列)を使うとエラーが発生
:12345 #=>SyntaxError
:ruby-is-fun #=>Nameerror
:ruby is fun #=>SyntaxError
:() #=>SyntaxError#シングルクオートで囲むとシンボルとして有効
:’12345′ #=>”12345″
:’ruby-is-fun’ #=>”ruby-is-fun”
:’ruby is fun’ #=>”ruby is fun”
:'()’ #=>”()”
“`“`ruby:シンボルの中で式展開
#ダブルクオートを使う
name = ‘Alice’
:”#{name.upcase}” #=> :ALICE
“`###シンボルと文字列
文字列とシンボルは別物なので、互換性はない。しかし、文字列をシンボルに変換するメソッド、シンボルを文字列にするメソッドはある
AWS Cloud9の環境構築 Rubyを最新の安定版にアップデートする
Cloud9の環境でプリインストールされている「RVM」を使っています。
## 現在のRubyの最新の安定版のバージョンを確認する
公式サイトで確認できます。
[Rubyのダウンロードページ](https://www.ruby-lang.org/ja/downloads/)
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538652/d77d0f11-fbb3-3209-585d-ee98a9c6476d.png)
2020/6/3時点で最新の安定版は2.7.1でした。## Cloud9の環境でインストールされているRubyのバージョンを確認する
listコマンドでインストールされている(切り替えることができる)Rubyのバージョンの一覧を表示します。
`rvm list`
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538652/38bdf273-3c07-0266-780f-b30bcb61298b.png)
デ
[Rails]ECサイトのカート機能
#はじめに
Ruby on RailsでECサイトを作成しました。
その際、カート機能の実装でかなり時間を費やしたので、やり方を記載してみようと思います。#前提条件
カート機能を持たせるためには、DBにテーブルが必要になってきます。
他テーブルとの関連付けなどについては以下の記事にて記載しております。
[[Rails] ECサイトのDB設計](https://qiita.com/kenzo-ta/items/4a3b0e0f0d4f37bb2dd8)#カート機能の根幹の部分
ここでは、セッションを作成します。セッションについては、以下の記事がわかりやすいです。
[【Rails】Sessionの使い方について](https://qiita.com/ozackiee/items/4ee774c81b2a0c571c05)要は、データを保持してくれる仕組みですね。
で、このカートのセッション作成は以下のようにコーディングしました。“`ruby
# application_controller.rb
class ApplicationController < Action
Rubyの『クラス』関係の問題を集めてみて解いてみた。
#Rubyのクラスが分からない
チェリー本を読んでいざアウトプットしていこうと思ったものの、自分でプログラムを作るとなると中々解けずに難しい。。。そんな僕と同じ悩みを抱えている方のために**基礎問題**を集めてみました。
基礎問題と言えど正直、曖昧な知識のままこの問題を解いていくと分からないことがあります。
出来れば答えを見ずに進めていくのが良いと思いますが、考えてもどうしても分からない場合は記事の下の方に回答を書いておきますので参考にして下さい。
そして、回答を読んでも分からないと言うことが僕自身ありましたので、分からなかった点まで記載していきます。
#問題(3問)
##①クラス変数とクラスメソッドについて
“`sample.rb
class Car
def self.run
@@count += 1
enddef count
@@count
end
endcar1 = Car.new
car1.runcar2 = Car.new
car2.run
car1.runputs Car.count
“`[こちらの記事の
【Rails・MySQL】Mac環境構築
# MacのRails・MySQL環境構築について
### 目次
0. ログインシェルの設定
1. Command Line Toolsのインストール
2. Homebrewのインストール・設定
3. Rubyのインストール・設定
4. MySQLのインストール・設定
5. Railsのインストール・設定## 1.ログインシェルの設定
※ OSがCatalina以降の場合、zshを利用するため、設定の確認・変更を行います。**ターミナル**
“`
# zshをデフォルトに設定
$ chsh -s /bin/zsh# ログインシェルを表示
$ echo $SHELL
# 以下のように表示されれば成功
/bin/zsh
“`
“`echo $SHELL“` コマンドで、 “`/bin/zsh“` と表示されない場合は、
一度ターミナルを閉じて、再度開いた上でもう一度 “`echo $SHELL“` コマンドを打ってください。## 2.Command Line Toolsのインストール
Command Line ToolsはWebアプリケーション開発に必
AtCoder Beginner Contest 169 A,B,Cまでをrubyで
4回目。前回C問題まで解けたので、今回もできるだろう、と舐めてかかったら、計算機工学の基礎のところでつまづく。
##A問題“`abc169a.rb
ab = gets.chomp.split(” “).map!{|item| item.to_i}
puts ab[0] * ab[1]
“`
書くだけ。##B問題
“`abc169b.rb
n = gets.chomp.to_i
a = gets.chomp.split(” “).map!{|item| item.to_i}
num = 1
ans = 1
th = 10**18
a.sort!{|a,b| (-1)*(a <=> b)}
if a[n – 1] == 0
puts 0
exit
end
for num in 1..n do
ans = ans * a[num-1]
num = num + 1
if ans > th
puts “-1”
exit
end
end
puts ans
“`
整数の掛け算なのだが、順に、
1. 0が
スコープについてのメモ
def 〜 endの処理に対して、
処理外から渡したい数値が存在する場合、
発生する。最初に渡したい変数は何かを宣言、
受け取る変数に、その渡したい変数を追記するだけ。#[スコープ発生例]
“`ruby
def show_review
line = “—————————”
puts “ジャンル : #{genre}\n#{line}\n”
puts “タイトル : #{title}\n#{line}\n”
puts “感想 :\n#{impression}\n#{line}\n”
endgenre = “aaa”
title = “qqq”
impression = “ddd”review.show_review
“`①「review.show_review」の中の「genre」「title」「impression」に
値を渡す
②スコープでエラーが出る
③「review.show_review」に(genre,title,impression)を加える
④合わせて、渡される
【Rails】gemのgoogle-cloud-visionでv1.0が出たので対応してみた
[以前に書いた記事](https://qiita.com/west2538/items/e94db445e22e6151718d)でコードを書き換える必要があったので対応してみました。
gem `google-cloud-vision`をv0.x系からv1.0.0にアップデートしたら要注意です。
基本的に
**Migrating to google-cloud-vision 1.0**
https://github.com/googleapis/google-cloud-ruby/blob/master/google-cloud-vision/MIGRATING.mdに書いてあるとおりなのですが`#safe_search_detection`については[こちら](https://googleapis.dev/ruby/google-cloud-vision-v1/latest/Google/Cloud/Vision/V1/ImageAnnotator/Client.html#safe_search_detection-instance_method)のほうがわかりやすかったで
Rails Tutorial 第6版 学習まとめ 第2章
##概要
この記事は私の知識をより確実なものにするためにRailsチュートリアル解説記事を書くことで理解を深め
勉強の一環としています。稀にとんでもない内容や間違えた内容が書いてあるかもしれませんので
ご了承ください。
できればそれとなく教えてくれますと幸いです・・・出典
[Railsチュートリアル第6版](https://railstutorial.jp/)##この章でやること
toy_appの作成を通してscaffoldの強力な機能を知る
RESTアーキテクチャとは何か大まかに把握する。##Toy_appの生成
①hello_appと同じようにRailsのバージョンを指定して生成する“`
$ cd ~/environment
$ rails _6.0.3_ new toy_app
$ cd toy_app/
“`②Gemfileも新しくなったのでToyアプリ用に書き換える
“`ruby:Gemfile
source ‘https://rubygems.org’
git_source(:github) { |repo| “https://github
プログラム基礎知識を勉強する際の考え方
自分はこんな感じでのイメージ学んだので、メモ書きです。
1. 作りたいプログラムの仕様を考える
2. プログラムをトリガーやイベントごとに分割して日本語で書き出す
3. コードを書く&説明コメントをつけて理解出来ない部分を無くす
4. 小さいコードのプログラムを沢山書く
5. 少しづつ大きいプログラムを書いてみるプログラムを書く際は、自分でコメント説明文を入れて
合っているかを確認してもらう!!
→自分で説明できるか?
なぜ、そのコードを入れたのかを意識する<仕様>
そのプログラムができる事を具体的に箇条書き
・
・
・<プログラムでどんな処理をするか日本語で説明>
・登場する変数は?・
・
・実際にコードを書く!
※その際に、自分でコメントを入れて全て
説明できるかを確認していく
【Error】編集後に画面遷移しない事象の解消法
# 概要
タスクの編集画面を実装し、確認のため編集を行い、ボタンを押下したのですが画面が変わらず。。。。:confounded:結果としては、「redirect_to」していなかった:sweat_smile:ということでしたが、エラー解決するまでの経緯を備忘録として残します!
# 確認方法
【前提】
編集画面で登録ボタンを押した後は、ボタンは押下できない状況にあった。
画面遷移もされない。
①MySQLに編集データが保存されているかを確認
→
変更されている:ok_hand:②エラー画面が出ていないのであれば、ターミナルにエラー情報が記入されているのではないかを確認
“`Terminal:terminal
No template found for TasksController#update, rendering head :no_content
Completed 204 No Content in 139ms (ActiveRecord: 3.4ms)
“`あった:rolling_eyes:
**No template**って記載されてた!!③コントローラ
form_with scope
#form_withのscopeについて
こんなフォームがあったけどscopeってどんな意味だってなった
“`ruby.rb
<%= form_with scope: :session, url: sessions_path do |f| %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
“`とりあえず検証ツールを見てみる
なるほどこんな働きなわけね。“`html
“`
##つまりscopeオプションはどんなはたらき?
spopeオブジェクトに私た値がname値のプレフィックス(接頭語)になっている
name = “session[name]”
という形でパラメータが送信されている。ってこと
###どうやって受け取る?
パラメータのプレフィックスにsessionがついた
HerokuにBugsnagを導入
Heroku × Railsです。
## アドオンを追加→APIキーを取得
ダッシュボードから操作する方法と、コマンドラインから操作する方法があります。
### ダッシュボードから操作する場合
– Herokuのダッシュボードにアクセス
– Resourcesタブを開く
– Add-onsの下の検索窓に’Bugsnag’と入力
– Provisionをクリック
– Settingsタブを開く
– Reveal Config Varsをクリックし、BugsnagのAPIキーを確認する### コマンドラインから操作
Heroku CLIがインストールされている状態で以下のコマンドを叩く“`zsh
$ heroku addons:create bugsnag
$ heroku config:get BUGSNAG_API_KEY
70d9b0852a968b1d0d0e329b5507f287 #APIキー
“`## アプリケーション側の設定
“`rb:Gemfile
gem ‘bugsnag’
“`
“`zsh
$ bundle install
$ rails ge
初心者向けRailsでブログを作ってみるチュートリアルその1
# これはなに?
[初心者向けRailsでブログを作ってみるチュートリアルその0](https://qiita.com/zako-pro/items/f03de3b0f463cc5b7ea3) の続きです。今回はブログサービスを作ります。
では、ブログサービスの機能を分解して考えてみましょう
実際のブログサービスにはいくつか機能がありますが、今回はブログサービスと呼ぶために必要なミニマムの機能を開発しましょう。# 機能一覧
## 訪問者用機能
– 記事閲覧機能
– コメント機能## 管理機能
– 管理者ログイン機能
– 記事投稿機能この中で、次のステップから最初に最低限ブログらしいものに必要な「記事閲覧機能」を作っていこうと思います。
# サイトマップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645608/55585e0c-6866-9307-d440-c360a43b8290.png)# ワイヤーフレーム
今回は最初に作る記事閲覧機能に含まれる2画面につい
道のりは長い…( ´Д`)y━・~~ MySQLが起動しない事象への対応
Railsを起動するため、Gem、bundleの再設定を行いました。ようやくアプリケーションを起動することができたのですが、アプリケーションにアクセスするとエラー出力され、アプリが動きません。
非常に道のりが長いですが、1つ1つ対応を進めていきます。エラー内容:
“`
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
Started GET “/” for ::1 at 2020-06-02 11:31:07 +0900Mysql2::Error::ConnectionError (Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (38)):
(省略)
“`①そもそもサービスが起動していなかった。(mysql.server statusで確認)
②ログを確認すると、プロセスを起動する際にファイルのオープンに失敗している
(ichikawadaisukenoMacBook-Air.local.err )“`
2
macOSをバージョンアップしたらrails s出来なくなった
#問題
① macOS Catalina のバージョンを10.15.4にアップデートする
② 現在制作途中のアプリケーションのディレクトリにてrails sする
③ 以下のようなエラーが出る
“`terminal
Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
“`#解決
https://nodejs.org/ja/download/current/
上記のサイトにて、最新版のNode.jsをインストールするか
ターミナルで、homebrewを用いてインストールを行う
“`terminal
% brew install nodejs
“`すると、無事rails sでローカルサーバーを起動できた。
Rspecでwebmockを使う
## 概要
外部APIなどにアクセスする機能をテストする際に、APIレスポンスのMockを定義できるgem。## Gemfileにwebmockを追加
“`rb
group :test do
gem ‘webmock’
end
“`“`shell-session
$ bundle install –path vendor/bundle
“`## テスト対象のmodel
“`rb:model/smaple.rb
require ‘net/https’
require ‘uri’class Sample
include ActiveModel::Modeldef get_request(api_url, params)
uri = URI(api_url)
uri.query = params
request(uri)
end
end
“`## rspecを作る
前述のget_requestメソッドを実行すると、WebMockで定義したstubの内容が返る。“`rb
require ‘rails_hel
capistranoで構築した環境でassetsの中身を1から作り直したい
## なぜそんなことをしたくなったのか
capistranoのassets:precompileが走っている時にEC2がメモリ不足に陥り、インスタンスを再起動させた結果、deployが中途半端なところで終わってしまいました。
もし中途半端なコンパイル結果をもとにWebサーバーが動いて実行時エラーなんて起きたときには目も当てられないので、なんとかまっさらな状態に戻そうとしてあれこれしました。## バージョン情報
“`
rails (5.2.4.2)
capistrano (3.11.0)
sprockets (3.7.2)
sprockets-rails (3.2.1)
“`## 前提条件
current_pathはこのパスとする
– /var/www/app_name/current
shared_pathはこのパスとする
– /var/www/app_name/shared
## 先に結論
結論から言うと、やるべきことはこれです。
1. /var/www/app_name/shared/public/assets の中身を消す
2. /var/www/a
「多段階選抜」の問題をRubyで解いてみた
### 問題
[第24回オフラインリアルタイムどう書くの問題](https://qiita.com/Nabetani/items/1c83005a854d2c6cbb69)### 参考 (Clojure 版)
先に Clojure でも解いています。
https://qiita.com/kts_h/items/64bb74fdcef642198bc5### Ruby 版
すでにRubyによる解答が多数出されているのですが、面白くなって自分でも解いてみたので、貼っておきます。
`solve` の中の `each_char` ブロックを綺麗に書きたかったので、クラスにしてインスタンス変数の中身を次々と変えていくようにしてみました。
“`ruby
class MultiStageSelection
def self.solve(cmds)
new.solve(cmds)
enddef initialize
@enum = 1.step
enddef drop_nth(n)
enum = @enum
@enum =