- 1. 複数のdeviseを作成して、別々のログイン画面を作る際のファイル作成からルーティング設定
- 2. rubyのAPI問題
- 3. 多対多のテーブルで関連付けたテーブルの情報を取得する方法
- 4. Docker環境でコマンドを用いてMysqlを編集
- 5. 初心者がRuby on Railsでポートフォリオを作成しました
- 6. Geeksalon
- 7. Rails 4.2.x から 5.0.x にアップグレードする際にカナリアリリースすると session が取得できなくなる不具合を回避する
- 8. collection_selectを使って、Active_Hashに格納したデータをプルダウンにする
- 9. ヘルパーメソッドform_withについて理解する
- 10. 【each, map…】今夜、配列処理をくらべてみました【ruby】
- 11. Rails AWS デプロイ後に更新しても反映されなかった時の対処法
- 12. Rails5.2でIEでもリンクを保存せずに直接開けるようにする
- 13. 整数同士の除算演算子の挙動 (C言語、C++、Scala、Java、Rust、Go言語、PHP、JavaScript、Perl、Python、Ruby)
- 14. Herokuにpushしたら Precompiling assets failed.と怒られる。
- 15. 【Rails6】Rails + Bootstrap 5.0.0-alpha 環境で、Bootstrapをカスタマイズする
- 16. Dockerで開発環境使ったら、Railsコマンドが使えなくなった罠を解決
- 17. 【Railsでhamlに動画を挿入する方法】
- 18. 知らなきゃ損?Rails【超】初心者から脱出するためのエラー間違い探し5選
- 19. rails c で「call ‘Hoge.connection’ to establish a connection」が出た時の対応
- 20. GraphQLのテストいろいろ
複数のdeviseを作成して、別々のログイン画面を作る際のファイル作成からルーティング設定
オリジナルアプリケーション開発を行っています。
アプリケーション作成で勉強になった事をまとめていきます。######userとdoctorで複数のモデルを作成し、別々の新規登録画面、ログイン画面を作成します。通常は1つのログイン画面なのでルーティン設定など自動生成されますが、二つ作るとカスタマイズが必要で苦労した事をまとめていきます。
ruby ‘2.6.5’
rails ‘6.0.0’まずdeviseをインストールします。
“`
gem ‘devise’
“`インストールします。
“`
% bundle install
“`再起動してGemを反映させます。
“`
% rails s
“`deviseを使用するためには、Gemのインストールに加え、 devise専用のコマンドで設定ファイルを作成する必要があるので、設定関連に使用するファイル」を自動で生成するコマンドをします。
“`
% rails g devise:install
“`
###ここからがいつもと違うカスタマイズです。
####1. config/ini
rubyのAPI問題
####問1
任意の文字列が “xyz”を含み、
xyzの前にピリオド(.)がない場合はTrueを出力し、
ピリオド(.)がある場合はFalseを出力するメソッドを作成しましょう。※わからない場合はAPIを利用して問題を解きましょう。
参考URL: https://docs.ruby-lang.org/ja/search/#####出力例:
xyz_there(‘abcxyz’) → True
xyz_there(‘abc.xyz’) → False
xyz_there(‘xyz.abc’) → True####ヒント
include?メソッドを使いましょう。
include?メソッドは指定した要素が、配列中に含まれているかを判定するメソッドです。“`ruby
array = [“foo”, “bar”]
puts array.include?(“bar”)
#=> true
puts array.include?(“hoge”)
#=> false
“`####模範回答
“`ruby
def xyz_there(s
多対多のテーブルで関連付けたテーブルの情報を取得する方法
#この記事でわかる事
多対多の関係になるようにアソシエーションを組み、
関連づけたテーブルの情報取得をする方法。
※詳しい状態は前提に記載。###前提
言語:Ruby
私の作成中のアプリを例にします。
私はCDとそこに収録された曲を多対多でアソシエーションを組みました。
多対多の理由:CDには複数の曲が入っている。
曲は複数のCDに入っていることもある。![visualMusic-Page-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661441/8bbe5625-633d-6b4e-5661-6723bb8c71e0.png)
![visualMusic-Page-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661441/7725255a-cbd8-f183-d9f1-15221636e4ae.png)
ということで、
対対多のテーブルを作成。
中間テーブルも同時に作成。
Docker環境でコマンドを用いてMysqlを編集
Dockerを初めてまだ日数が立っていないので、備忘録としてターミナルでMysqlに接続し、弄る方法を記述していく。
始めに、
“`
docker ps
“`で、MysqlのコンテナIDを確認。
“`
name@mbp APP_NAME % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2acfbade0963 app_name_web “rails s -p 3000 -b …” 2 days ago Up 2 days 0.0.0.0:3000->3000/tcp app_name
c71b0bf50f29 mysql:5.6.47 “docker-entrypoint.s…” 2 days ago Up
初心者がRuby on Railsでポートフォリオを作成しました
# はじめに
今回の内容は転職活動中で作成しているポートフォーリオの説明です。
アドンバイスなどがありましたらよろしくお願いします。# 開発環境
– Ruby 2.6.3
– Rails 5.2.3
– DB:PostgreSQL 12.3
– AWS/EC2/S3
– Route53,ACM,ALBでSSL# 背景
売れていないお笑い芸人は生活するために、バイトなどをしております。
芸人は、自分が出演するライブのチケット販売のノルマを課せられ、達成できない場合、給料から天引きされます。
給料が天引きされるて給料が入らなくなると、本来するべきである芸を磨くということがに時間を使えなくなり、バイト三昧と負のループに陥ってしまいます。そこで芸人自身が出演するライブのチケットを売り切ることで収入が安定し、
芸を磨くことに当てる時間が増えるため芸人としてヒットする確率も上がると考えました。現在、芸人の方々もSNSを駆使してライブの情報やチケット販売の広報などをしておりますが、
1つのプラットフォームにまとまっていないため、検索がしづらく、すでに芸人を知っている方はライブの
Geeksalon
8月からGeeksalonという学生限定のプログラミングサロンに入会することになりました。以前から、独学をしておりましたが、それでは厳しいことを実感し、入会することを決意いたしました。
教材は既におわり、もうすぐポートフォリオ作成に入りますが、自分の納得のいく成果物が作れるように精一杯努めて参ります。サロンに入ったことを後悔しないように、日々勉学に励む所存です。
Rails 4.2.x から 5.0.x にアップグレードする際にカナリアリリースすると session が取得できなくなる不具合を回避する
## はじめに
– カナリアリリースとは複数サーバのうちの一部にだけ新しいバージョンのアプリケーションをリリースするデプロイ手法である
– Rails 4.2.x から 5.0.x にアップグレードする際にカナリアリリースをする、つまり Rails 4.2.x と 5.0.x のアプリケーションが混在した環境を作ると session が取得できなくなる不具合が発生するのでこれを回避したいこの時世に Rails 5.0.x へのアップグレード(しかもカナリアリリースを挟んで)をする方がいらっしゃるのかは不明ですが、どなたかの役に立てば幸いです :pray:
Ruby や Rails をある程度触ってる方向けの内容なので、Rails における session や rack などの基礎的な説明は省きます。
## 解決方法
– rack gem のバージョンを `2.0.7` に固定する
## 原因を一言で
Rails 4.2.x -> 5.0.x のアップグレードに引きずられて rack gem が 2.0.8 以上にアップデートされるのが原因。(rack の 2.0.7
collection_selectを使って、Active_Hashに格納したデータをプルダウンにする
##概要
今回実装したいのは、商品出品機能を実装する際に、発送元や商品の状態などの変化しない情報をActive_Hashとして格納して、ビューファイルにプルダウンとして表示する機能です。
Active_Hashで都道府県などを格納する方法に関しては、別で記事を書いたのでそちらを参照してください。
[Active Hashについて](https://qiita.com/keiya_man/items/3b0f50254ceb39097f42)
##collection_selectとは
ヘルパーメソッドの一つで、セレクトボックスのなかに、キーを与えたバリューを表示できる記述です。基本的な記述は
“`ruby:xxx.html.erb
f.collection_select(:カラム名, 要素の配列, value属性の項目, テキストの項目, { prompt: “選択してください” }
“`となるようです。
##例
今回は、商品出品する際に配送料の有無をPostageTypeクラスとして実装した例を書き残しておきます。“`ruby:products/new.
ヘルパーメソッドform_withについて理解する
##form_withとは
form_withとはRailsのヘルパーメソッドの一つで、ビューファイルに記述します。
このメソッドによって、情報を送信することができます。form_withを使うと、入力フォームに必要なHTMLを作成することができます。
調べてみると、送信した情報をデータベースに保存する時と保存しない時では若干記述が変わるみたいです。
**データベースに保存しない時**
“`ruby:xxx.html.erb
<%= form_with url: "パス" do |f| %>
フォーム内容
<% end %>
“`**データベースに保存する時**
“`ruby:xxx.html.erb
<%= form_with(model: モデル名, local: true) do |f| %>
フォーム内容
<% end %>
“`form_withでは、データを保存しない
input typeの要素も使えるし、
データを保存するヘルパーメソッド(f.text_fieldなど)も両方使えるようです。最後に、実際に今日実装してた内容を抜粋して記録とし
【each, map…】今夜、配列処理をくらべてみました【ruby】
rubyの配列の要素を操作するメソッドってたくさんありますよね。
結局、どれがどんな挙動で、どれが一番効率よくかけるかどうか比較するためにまとめてみましたよ。#配列の操作早見表
|メソッド|戻り値|挙動
|:–|:–|:–
|each|レシーバの配列|ブロック内で配列の要素をひとつずつ、繰り返し処理
|each_slice|nil|ブロック内で配列の要素を複数単位で、繰り返し処理
|each_with_index|レシーバの配列|ブロック内で配列の要素とインデックス番号をそれぞれ繰り返し処理
|map|変化した配列|配列のまま、要素を変化させる
|select|変化した配列|配列のまま、条件式がtrueになる要素に絞る
|reject|変化した配列|配列のまま、条件式がfalseになる要素に絞る
|find|要素|要素の中で、最初にヒットした要素を取り出す#繰り返し処理
###each
要素を単数でループさせる“`ruby
array = [“リンゴ”, “ミカン”, “スイカ”, “メロン”]
array.each do |obj|
p obj
end
Rails AWS デプロイ後に更新しても反映されなかった時の対処法
# はじめに
苦労して作り上げたアプリをさらに苦労してAWSにデプロイしたという人も多いのではないでしょうか?
私も同じく相当苦労してAWSでデプロイすることに成功しました。
・・・が!
これってローカルでコード書き換えたりした時ってどうやって更新するんだろう?
もちろん**Capistrano**ってやつで(まだ学習してないので何も知らない)
自動でデプロイしてくれるようにできるのかもしれませんがとりあえずは自動ではなく手動(?)で更新したいのです。最初の認識ではEC2にログインしてアプリのリポジトリで `git pull` したら反映されるものだと思ってやってみましたが更新されておりませんでした。
## 調べてみた結果
調べてみましたがなかなか欲しい情報にヒットせずこんなことで立ち止まってるのは自分だけなのかな???
と少し不安になりましたがググりまくってなんとかこれかな?という情報を見つける事ができました。
それが**unicornの再起動**でした。
## 解決方法
“`
$ ps -ef | grep unicorn | grep -v grep
Rails5.2でIEでもリンクを保存せずに直接開けるようにする
railsでPDFをsend_dataしているリンクが、IE11では保存の選択肢しかでず、不思議に思っていたら
Rails5.2リリースノートの変更点 https://railsguides.jp/5_2_release_notes.html
にありました。
> セキュアなX-Download-OptionsおよびX-Permitted-Cross-Domain-Policiesをデフォルトのヘッダーセットに追加。 (Commit)デフォルトでは、脆弱性を突いたファイルをいきなりアプリで開かないようにとの意図かと思うのですが、試したブラウザの中では皆スルーされている中で、IE11だけ「保存しかできない」状態になるのが意外というかなんというか。(いろいろ誤解している可能性あり)
そこでIE11でも直接開きたい場合は例えばこんな感じ。
“`
response.headers[“X-Download-Options”] = nil (if …リスク許容条件…)
send_file(file_path,:filename => filename
整数同士の除算演算子の挙動 (C言語、C++、Scala、Java、Rust、Go言語、PHP、JavaScript、Perl、Python、Ruby)
整数での `/` と `%` の演算子の挙動。
整数を整数で割ったら **整数** vs **浮動小数点数** どっち?
– `-5 / 4` は **-1.25**
– PHP
– 割り切れないから浮動小数点数
– Perl
– 割り切れないから浮動小数点数
– `use integer` を宣言するとC言語派に変わる
– Python
– 割り切れるか関係なく割り算したら浮動小数点数
– C言語派のために `//` という演算子もある
– JavaScript
– はじめから整数と浮動小数点数の区別がない
– `-5 / 4` は **-1**
– C言語 / C++ / Scala / Java / Rust / Go言語
– 静的型付けの言語
– `-5 / 4` は **-2**
– Ruby
– 仲間はずれ負の剰余(割り算の余り `%`演算子)は **正** vs **負** どっち?
–
Herokuにpushしたら Precompiling assets failed.と怒られる。
####オリジナルアプリケーションを作成中です。
ruby ‘2.6.5’
rails ‘6.0.0’
mysql2′, ‘0.5.3’Herokuにpushしたら、
“`
remote: !
remote: ! Precompiling assets failed.
remote: !
remote: ! Push rejected, failed to compile Ruby app.
remote:
remote: ! Push failed
remote: Verifying deploy…“`
“`
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to ‘https://git.heroku.com/オリジナルアプリ
名.git’“`
とエラーが出ました。
派手な赤文字エラーと!マークに動揺しましたが、すぐに調べました。
ちなみに本番環境にアクセ
【Rails6】Rails + Bootstrap 5.0.0-alpha 環境で、Bootstrapをカスタマイズする
※Qiita初投稿です。宜しくお願い致します。
BootstrapはCSSフレームワークとして数多くのプロジェクトに導入されていて、
2020年6月にメジャーバージョンアップとして5.0 alpha がリリースされました。長年使われているフレームワークで採用数も多いことから、デフォルト設定で使用されている場合、
「Bootstrap臭」と揶揄されることもありますが、
カスタマイズすることで柔軟にUIを変えることが可能です。今回はRails 6.0環境にwebpackerで導入したBootstrap 5.0において、
各変数をカスタマイズする方法についてご紹介します。# 概要
Bootstrap内で設定されている_variables.scssの値を、別ファイルから上書き変更します。
# 参考文献・記事
以下記事で紹介されている方法について、cssをwebpackerで管理する場合に応用した方法になります。
また、以下リンクの公式ページで紹介している方法を参考
Dockerで開発環境使ったら、Railsコマンドが使えなくなった罠を解決
いよいよ本格的に何か作ろうと思いまして、まずは開発環境で、Rails6の環境構築を終了しました。
ちなみに参考にした記事は、
・[DockerでRuby on Railsの環境構築を行うためのステップ【Rails 6対応】 – Qiita](https://qiita.com/kodai_0122/items/795438d738386c2c1966)その他、上手くいかなかった部分には、
・[Rails6+MySQL+Nginx+Unicorn+Docker環境構築メモ – Qiita](https://qiita.com/horoyoi/items/b9f2a7f8cf066116c068)
・[PostgreSQL(Docker)にRails(Docker)が接続できなくなったから調べてみた。(could not translate host name “db” to address: Name or service not known) – Qiita](https://qiita.com/at-946/items/2fb75cec5355fad4050d)上記の記事を参
【Railsでhamlに動画を挿入する方法】
動画が挿入できると、webサイトをお洒落でカッコよく装飾できます。
今回はRailsでhamlに動画を挿入する方法を詳しく解説していきます。# publicフォルダにvideosフォルダを作成
テキストエディタで新しいフォルダを作成をクリックし、public下にvideoフォルダを作成します。# videoフォルダ下に挿入したい動画ファイルを入れる
使用したい動画ファイルをvideoフォルダ下に持ってきます。この時、**動画ファイルの拡張子はmp4**を使用してください!
なぜなら、現在mp4をほとんどのブラウザが対応しているからです。
今回は拡張子mp4のファイル、sample_video.mp4を用います。# hamlに以下を記述
“`ruby:◯◯.html.haml
= video_tag(“/videos/sample_video.mp4”, autoplay: true, loop: true, muted: true, class: ‘video’)
“`1つずつ解説していきます。
**= vide
知らなきゃ損?Rails【超】初心者から脱出するためのエラー間違い探し5選
# はじめに
「エラーメッセージ読めばわかるだろ!」というようなエラーでも、超初心者の頃は検討もつかずとりあえずGoogle先生に頼ります。
この記事はそんな「とりあえずエラーメッセージをコピペしてググります」レベルのRuby on Rails超初心者に向けて書いたあるあるエラーの対処法の記事です。# 例題1: エラーメッセージの日本語化がうまくいかない…(NoMethodError (undefined method `deep_symbolize_keys’)
I18nを使ってエラーメッセージを日本語化しよう!参考:[Rails で I18n を使って日本語化](https://qiita.com/yutackall/items/0ff97132f31e5bacbf00)
よし!Webからダウンロードした日本語ファイルを設定したぞ
“`ruby:ja.yml
ja:
activerecord:
errors:
messages:
record_invalid: “バリデーションに失敗しました: %{errors}”
restrict_de
rails c で「call ‘Hoge.connection’ to establish a connection」が出た時の対応
## 問題
“`
[1] pry(main)> Hoge
=> Gravure::Series::Publics (call ‘Hoge.connection’ to establish a connection)
“`## 解決方法
“`
[2] pry(main)> Hoge.clear_cache!
[writing] (3.7ms) SET NAMES utf8mb4, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ‘,STRICT_ALL_TABLES’), ‘,NO_AUTO_VALUE_ON_ZERO’), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
=> nil
“``.clear_cache!` を実行することで解決しました
GraphQLのテストいろいろ
# はじめに
最近、Graphql-rubyでAPIを実装しています。
当然、graphqlのテストを書く必要があるんですが、いろいろ方法がありそうなので忘備録としてまとめておきます。
# 実際にapiを叩く方法
まず、実際にapiを叩く方法を説明します。
以下が例になります。“`spec.rb
RSpec.describe User, type: :request do
describe ‘user’ do
it ‘指定したusrが取得できること’ do
user = create(:user)post ‘/graphql’, params: { query: query(id: user.id) }
json = JSON.parse(response.body)
data = json[‘data’][‘user’]expect(data).to include(
‘id’ => user.id
)
end
end
enddef que