- 1. ActiveRecord::Type::Boolean#cast の返り値について
- 2. bundle installでmysql2が入らないときの対策コマンド
- 3. コントローラとアクションでビューページの分岐をする時
- 4. Rails でのCSS設計、FLOCSS+ルールでViewをコンポーネント化した
- 5. #Rails like “not where” “without_xxx” method in scope ?
- 6. 初学者がDocker on Railsで開発したアプリをAWS EC2にデプロイする際につまづいたこと
- 7. ものぐさツールを作って rails アプリ開発のめんどう事を減らそう
- 8. rails 総まとめ
- 9. 【Rails】ステータスフィード【Rails Tutorial 14章まとめ】
- 10. 個人開発の企画からリリース・運用まで
- 11. 【Rails】Rails⇔JavaScript間で時間データを渡す方法
- 12. Rails 初学者のアソシエーションの解説
- 13. #Rails + docker-compose + volume mount + dotenv gem の組み合わせで docker コンテナでは存在しないはずの環境変数が rails console や rspec で突如として現れキャッシュされているように思える怪奇現象と立ち向かっていた
- 14. モデルとデータベースの関係
- 15. Rails 6.0の “Active Storage’s ImageProcessing transformer doesn’t support :combine_options” という警告に対処する方法
- 16. Railsチュートリアル 第11章 アカウントの有効化 – アカウント有効化のメール送信
- 17. OmniAuth【google-oauth2】のログイン時のエラーJWT::InvalidIatErrorについて
- 18. RailsのGeocoderとあそぼ
- 19. フィクスチャとFactoryBotの混在
- 20. rails cが動かねぇ!
ActiveRecord::Type::Boolean#cast の返り値について
API などでクライアント側から渡ってきた `”true”`、`”false”`、`1`、`0` などの値を、 Ruby の `true` や `false` として扱いたいときがある。
Ruby では `false` と `nil` 以外の値はすべて `true` として扱われるため、`!!` を先頭につけたとしても実現できない。“`rb
!!nil #=> false
!!0 #=> true
!!’false’ #=> true
“`そのようなときには `ActiveRecord::Type::Boolean#cast` を使う。
“`rb
ActiveRecord::Type::Boolean.new.cast “true” #=> true
ActiveRecord::Type::Boolean.new.cast 0 #=> false
“`しかしながら、どんな値でも `true` か `false` にしてくれるわけではない。
“`rb
ActiveRecord::Type::Boolean.new.cast nil #=> nil
Ac
bundle installでmysql2が入らないときの対策コマンド
## ◆現象
bundle installをすると次のようなエラーが出てmysql2が上手く入らない。“`
〜省略〜
current directory: /Users/hogehoge/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/mysql2-0.5.2/ext/mysql2
make “DESTDIR=”
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1make failed, exit code 2
コントローラとアクションでビューページの分岐をする時
ありがちなコントローラーαがAまたはBみたいな分岐を書かなきゃいけない時
“`悪い例.rb
if コントローラーα == ‘A’ || コントローラーα == ‘B’
“`と書いていたんだけど
“`いい例.rb
if controller_name.in?(%w(A B))
“`と短く書くことができる!
これからは`controller_name.in?`を使おう
アクションの判断も`action_name.in?`で判断することができる!##例文
“`rubyreturn render(‘try/steps’) if controller_name.in?(%w(try orders)) && action_name.in?(%w(apply confirm))
“`
Rails でのCSS設計、FLOCSS+ルールでViewをコンポーネント化した
# FLOCSS概要
FLOCSS については、Qiitaなど各所の記事を参照しました。
簡単に概要を書くと、CSSをレイヤーで分けて、– Foundation
– Layout
– Object
– Component
– Project
– Utilityにて管理することを指しています。
そのPrefixをとって、FLOなCSSで、FLOCSS(フロックス)です。Object をどう分けるのか?は悩むところです。
[脱・CSS無法地帯。FLOCSSで指針のある設計を。](https://qiita.com/sueshin/items/dcbaf3d8a0adb6b087db)や[FLOCSSを使ったCSS設計での悩みどころと解決案](https://qiita.com/uggds/items/d904b2f9a103c37a25fa)が参考になりました。## 階層
FLOCSS そのままに、“`
– foundation
– layout
– object
– component
– project
– utility
`
#Rails like “not where” “without_xxx” method in scope ?
I found but it was a method of enumerize
https://github.com/brainspec/enumerize
![image](https://user-images.githubusercontent.com/13635059/70185884-05b67700-172e-11ea-8044-45b068f56f78.png)
# Original by Github issue
https://github.com/YumaInaura/YumaInaura/issues/2810
初学者がDocker on Railsで開発したアプリをAWS EC2にデプロイする際につまづいたこと
# はじめに
私はプログラミングを半年弱ほど独学している者です。
今回、Rails + Dockerで開発したアプリケーションをAWS EC2にデプロイするところでつまづき、まる一週間を浪費してしまいました。
この記事が、同じようにつまづいている方の一助となれれば幸いです。また、今回作成したアプリケーションのソースコードは以下のURLからご覧いただけますので、良いコードではございませんが参考にできそうな部分があれば、参考にしてみてください。
https://github.com/aiirononeko/GoodCoffeeByGoodBarista
# ①production環境で動作する設定にしていなかった
基本中の基本すぎて笑えてきます…笑
いや、笑えません…。
実際production環境で動作するように設定をしておらず、この一週間を溶かしたと言っても過言ではありません。
一番最初にデプロイしたときは、productiond環境で立ち上がってすらおらず、RDSとの連携ができなくてつまづいてました。Docker on Railsで開発したアプリケーションをpro
ものぐさツールを作って rails アプリ開発のめんどう事を減らそう
この記事は SmartHR Advent Calendar 2019 6日目の記事です。
開発作業をしているとめんどくさいな〜、忘れそうだな〜、と思うことが時々あります。
たとえば rails アプリ開発の際に migration ファイルを追加したときは migrate 済みの schema.rb をコミットし忘れないようにしないと、といったことです。そういった、ある時に何かしなければいけない、そしてそれを覚えておく、ということが自分はとても苦手です。帰宅前に牛乳を買ってきて、と会社にいる時におつかいを頼まれることがありますが、大体帰宅時には忘れています。何の対策もせずに買って帰れたためしがありません。それでは困るので、自分はリマインダーをセットするなどの対策を取るようにしています。
対策によって面倒なことから開放されたり、苦手なことが普通のことになったりします。この記事では日々の開発の中で見つけた面倒事と、その対策として作ったツールの紹介をします。
これらのツールは今まで特に紹介してこなかったので、この機会になぜ作ったのかとツールの概要とを書き残しておこうと思います。
rails 総まとめ
多くのrailsについて投稿してきたので
総括としてまとめて見ようと思います。# railsの基本
rails基本その1: [基本作成](https://qiita.com/savaniased/items/e442696c052bc7d34b07)
rails基本その2: [データベースの作成](https://qiita.com/savaniased/items/59f5c1b8fdf118613d3e)
rails基本その3: [投稿画面の作成](https://qiita.com/savaniased/items/de66d0a8ea43e42805df)# rails発展
rails 発展その1:[ルートパス ページネーション データの並び替え 部分テンプレート](https://qiita.com/savaniased/items/57aee81e74ba737c50a3)
rails 発展その2:[ログイン機能](https://qiita.com/savaniased/items/a7ee3cf1cd6dab4755e0)
rails 発展その3-1: [
【Rails】ステータスフィード【Rails Tutorial 14章まとめ】
##ステータスフィード
自身のマイクロポストと、フォローしているユーザーのマイクロポストを表示するフィードを実装する。###フィードの条件とテスト
フィードが満たす条件は以下の3つである。
①フォローしているユーザーのマイクロポストを含む
②自身のマイクロポストを含む
③フォローしていないユーザーのマイクロポストを含まない
これらを満たすように、まずテストを書く。“`test/models/user_test.rb
require ‘test_helper’class UserTest < ActiveSupport::TestCase . . . test "feed should have the right posts" do michael = users(:michael) archer = users(:archer) lana = users(:lana) # フォローしているユーザーの投稿を確認 lana.microposts.each do |post_following| as
個人開発の企画からリリース・運用まで
気づいたら2019年がもう終わりなのと、Qiitaのアイコンが変わっているのに最近気づきました。
今回はサービスを個人開発したときの流れを書いてみたいと思います。
何か作ってみたいけど
– 具体的に何を考えればいいのか
– どうやってリリースするのか
– どうやって改善していくのかなどの参考になればと思います。
## TL;DR
– アイデアを出すには色々なサービスを自分で使ってみて、いいところや真似したいところを探す
– サービスを企画する上で最も重要な機能を1つ考えて、まずはそれを実現するために必要なことを書き出す
– 素早く作ってリリースしたいから`Rails`と`Heroku` を使う
– 見た目はそこそこでいいから`Bootstrap`で良さげなテンプレートを使う
– サービスのフィードバックを素早く取り入れるためのCI/CD環境を整える## 何故作るのか
個人開発サービスを作る理由は人それぞれだと思うのですが、個人的に以下の3点が多い気がします。
**1. 勉強のために既存の似たようなサービスを作る**
**2. 収益のために作る**
**3. 自分が
【Rails】Rails⇔JavaScript間で時間データを渡す方法
## 【はじめに】
先日、こちらの記事を書きました。
[【Rails】Rails側で定義した変数をJavaScriptに簡単に渡せるgem 「gon」を使ってみた – Qiita](https://qiita.com/terufumi1122/items/943241581a4a21826af5)ただ、時間関係の変数については**フォーマット**がRubyとJavaScriptで異なってしまい、うまく動きません。
そこでRails⇔JavaScript間で**時間データを渡す変換方法**を調べたのでまとめてみました:relaxed:
## 【この記事が役に立つ方】
– Rails⇔JavaScript間で時間データをやりとりしたい方## 【この記事のメリット】
– Rails⇔JavaScript間で時間データをやりとり出来るようになる。## 【環境】
– macOS Catalina 10.15.1
– zsh: 5.7.1
– Ruby: 2.6.5
– Rails: 5.2.4## 【ポイント】
### **1000を掛ける、割る**で調整する。—
#
Rails 初学者のアソシエーションの解説
##has_manyとかいまいちわからない人向け!
これがわかる人は不要 [*Rails ガイド*](https://railsguides.jp/association_basics.html)1.has_manyとbelongs_toはセットではない。一緒に使うことが多いが独立して使うことができる。
2.メソッドを理解することが重要!例えば
Author(著者)テーブルとBook(本)テーブルがあったとし、その二つを関連づけたい時。>class Author < ApplicationRecord >has_many :books, dependent: :destroy
>end>class Book < ApplicationRecord >belongs_to :author
>end上記の記述で下記のような連携ができるらしいのだが、いまいちどのような仕組みなのかわからなかった、、
>@book = @author.books.create(published_at: Time.now)**こう言う時は一つづつ分解して考えるといい**
#Rails + docker-compose + volume mount + dotenv gem の組み合わせで docker コンテナでは存在しないはずの環境変数が rails console や rspec で突如として現れキャッシュされているように思える怪奇現象と立ち向かっていた
# Conclusion
– .env file copied from host and exist in docker container ( BAD CASE )
– “dotenv” gem read .env with rails console and rspec
– not exestence env in docker container appears in rails!HEY DO NOT DO COPY FUZZY with Dockerfile
# What was the trouble
is this the trouble dependent on my environment or code ?
# .env
“`
ABC=XXX
“`# docker-compose up
.env file effect for build docker-compose file
it for not docker container ENV# docker container
Yes so not set ABC env in co
モデルとデータベースの関係
MVCモデルのM(モデル)についてまとめます。
# モデルとは何か?
モデルの一番の役割は、Railsの中でデータベースへのアクセスをはじめとする情報のやりとりに関する処理を担当しています。# データベースとテーブルとは何か?
データベースはデータを保存する場所です。
テーブルはそれぞれのデータを整理し、振り分けたものです。
データベースはデータを保存するための箱、テーブルは収納場所でイメージすると少しわかりやすいと思います。モデルは仕分け人、テーブルは引き出しのイメージです。
必要なデータの登録やデータの引き出しをモデルが担当します。テーブルとモデルの関係性は、テーブルとモデルクラスの名前によって決定します。
これは、モデルの命名規則と関係しています。
モデルとテーブルを紐づけることでデータの登録、取り出しができます。
例)userモデル⇄userテーブル# まとめ
モデルとデータベースの間では、モデルを通してデータベースにアクセスしてデータのやりとりをするためにあります。
Rails 6.0の “Active Storage’s ImageProcessing transformer doesn’t support :combine_options” という警告に対処する方法
## 困っていたこと
Rails 5.2時代にActiveStorageでこんなコードを書いていました。
“`ruby
user.avatar.variant(
combine_options: {
resize: “150^”,
gravity: “Center”,
crop: “150×150+0+0”,
auto_orient: true
}
)
“`やっていることは縦長だったり横長だったりする画像を、中心で正方形に切り抜いて150×150サイズに縮小することです。(mini_magickを使用)
つまり、この画像↓を、
![3500×1500-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/ae311fa3-0c92-cd3a-f019-65e0d33de4ad.png)こうするわけです↓
![3500×1500.png](https://qiita-image-store.s3.ap-northeast-1.am
Railsチュートリアル 第11章 アカウントの有効化 – アカウント有効化のメール送信
# 何をするか
「RailsのAction Mailerライブラリを使って、Userのメイラーを追加する」というのがこの節の内容となります。
以下がポイントとなります。
* 今回実装するメイラーは、Usersコントローラーの`create`アクションにおいて、有効化リンクをメール送信するために用いる
* メイラーの構成は、コントローラーのアクションと類似している
* メールのテンプレートは、ビューと同様の要領で定義できる
* 今回実装するテンプレートには、有効化トークンとメールアドレス(=有効にするアカウントのメールアドレス)を含む# 送信メールのテンプレート
## メイラーの生成
メイラーの生成は、モデルやコントローラー等と同様、`rails generate`で行います。
“`
# rails generate mailer UserMailer account_activation password_reset
Running via Spring preloader in process 13442
create app/mailers/
OmniAuth【google-oauth2】のログイン時のエラーJWT::InvalidIatErrorについて
# 状況
Railsでomniauth-google-oauth2を利用してログイン認証を行っていた際に、以下エラー「JWT::InvalidIatError」が発生した。
その解決方法の備忘録になります。# 解決策
## 結論
config/initializers/devise.rbに以下を追記する。
(Deviseを実装していた)“`ruby:変更前
config.omniauth :google_oauth2, ENV[‘GOOGLE_APP_ID’], ENV[‘GOOGLE_APP_SECRET’], name: :google
“`“`ruby:変更後
config.omniauth :google_
RailsのGeocoderとあそぼ
# はじめに
はじめまして、DMM WEBCAMPでメンターをしております。
昨年[「Rails5でGoogleMapを表示してみるまで」](https://qiita.com/tiara/items/4a1c98418917a0e74cbb)という記事を書きました。
それからというもの、私は地図おじさんとなり、数多の地図表示を手助けするはめになりました。
ときには、地図に関連してGeocodingの質問もいただくようになりました。
しかしながら、Geocodingはあまり触っていなかったので、この際まとめておこうと思った次第です。# Geocoding
GeoCoding(ジオコーディング)とは
> Wikipediaより
ジオコーディングは、狭義には地名、住所が示す場所に対して、地理座標を与えることを言う。その場所は地点(例:市役所)では一点に定まるが、ある範囲(例:市町村)では、代表点を一点で示す場合と、領域を多角形、すなわちポリゴンで示す場合がある。代表点は応用目的により、「東西の中心、南北の中心」のように幾何的に与えるか、何らかの意味をもった地点を「市の場合は市役所の位
フィクスチャとFactoryBotの混在
## 問題
– 7年前からのアプリケーション。フィクスチャとFactoryBotを使ったspecが混在している。フィクスチャを使ったspecを書き直すのは面倒。
– feature specをsystem specに変更し、DatabaseCleanerを使うのをやめ、use_transactional_fixturesをtrueに変更した。
– フィクスチャデータがテストDBに残って、FactoryBotを使ったspecに影響を与えるので困る。## フィクスチャとRspecのHooks
「use_transactional_fixtures = true」では、次のような流れになります。投入されたフィクスチャデータは消されません。フィクスチャデータが一度投入されると、テーブル名がキャッシュに保存され、次に「fixtures テーブル名」が来たら投入はスキップ、となります。
“`text
before(:context)
DELETE FROM フィクスチャのテーブル
INSERT INTO フィクスチャのテーブル
BEGIN
before(:example)
テストコード
rails cが動かねぇ!
# rails c が息をしていない…
別件でrailsのバージョンアップをして、railsを入れ直した後のこと。
consoleで確認したいことがあり、“`rails c“`を叩く。
…反応がない、ただの屍のようだ。
いや困るねん。やめてクレメンス。# いらないプロセスは躊躇なく殺そうね
てことでプロセスを確認。“`
ps aux | grep rails
“`
…何もないな。
調べたところ、“`rails c“`ではspringというプロセスも走るとのこと。“`
ps aux | grep spring
~~ 8324 0.0 0.0 4352360 3228 s009 S+ 火03PM 0:00.76 spring server | ~~ | started 47 hours ago
“`
いやがった!!お前のせいか!!“`
kill -9 8324
“`
そしてめでたくconsoleが起動。
いやぁ良かった。
無駄なプロセスは殺そう。## 追記
“`
spring stop
“`
でも可。
これだとプロセス確認せ