Rails関連のことを調べてみた2020年01月18日

Rails関連のことを調べてみた2020年01月18日

【Rails】link_toメソッドでaria-haspopup、data-toggleなどのHTML表現を入れる方法

#エラー発生

Railsのlinks_toメソッドで下記のようにaria-haspopup、aria-expanded、data-toggleなどのHTML表現を入れようとしたところ、エラーが出た。

“`
<%= link_to root_path, class: 'nav-link', data-toggle: dropdown, aria-haspopup: true, aria-expanded: false, id: header-profile do %>

<%= image_tag('xxx.jpg', size: '60x60') %>

<% end %>
“`

syntax error, unexpected 〇〇, expecting 〇〇
というエラーが出まくる。
構文エラーなのでどこか書き間違えがあるのかと思ったが、コードを見ても余計な文字や入れ忘れがあるように見えない。

#解決方法
調べて見るとlink_toの引数のハッシュとしてつける場合、キーをシングルクオテーションをつける必要がある。例えば、`data-toggle: dropdown

元記事を表示

非同期通信について初投稿

#非同期通信(Ajax)とは

画面の遷移のない通信を非同期通信という。
リクエスト後にレスポンスが帰ってきた際、ブラウザが再読み込みされること無く通信が行われる通信方法で、非同期通信は英語で”Asynchronous JavaScript + XML”と表現され、略してAjax(エイジャックス)と呼ばれる。

Ajaxでは、レスポンスのデータにJSONという形式が使われることが多い。

##同期通信と非同期通信の違い

同期通信・・・webブラウザからサーバーにリクエストを通信しレスポンスが返ってくる時に、全ての情報を通信しているので画面が一瞬白くなり、サーバーからレスポンスが返ってくるまでは他の作業ができない

非同期通信・・・ブラウザから一部の情報をリクエストするのでそれ以外の部分は変わらないため画面が白くなることはない。そのため、サーバーからレスポンスが返ってこなくても他の作業ができる。

##JSON

Java Script Object N<

Rails Tutorial 第一章でつまづいたところと参考URL(簡易メモ)

○所要時間
とりあえず一読 → 2:30(現在合計2:30)
一読後手を動かして → 4:00(現在合計4:00)
合計6:30

・cloud9初期設定迷う
→初期設定から変更なしでOK
参考URL:https://note.com/yutsuku/n/ncb752afcc61f

・rails server 起動できない(rails serverが弾かれる)
javascriptをダウンロード(具体的には、vi Gemfile→最後に「gem ‘therubyracer’」を追記)
参考URL:http://yso15.hatenablog.com/entry/2015/03/21/225843

かつ、cd ~/environment/hello_app でディレクトリ の移動後、rails serverを起動。

・rais serverってどうやって開けば(確認すれば)いいの?
ページの表示方法は以下
0.画面上部tools→preview(これ以外下記参考URL引用)
1. $ rails serverでサーバを起動する(上記の結果でOK)
2. 画面上部Preview →

ruby 2.7.0 + Rails 5.2.4 + mysql 5.7.28 でDocker開発環境を構築する備忘録

# 流れ

1. Dockerfileを作成
2. docker-compose.ymlを作成
3. Gemfile,Gemfile.lockを作成
4. イメージ・コンテナの作成
5. Rails初期設定
6. Githubにリモートリポジトリ作成

# ディレクトリ構成

“`
application_root/
– Dockerfile
– docker-compose.yml
– Gemfile
– Gemfile.lock
– その他Railsアプリケーションファイル群
“`

# Dockerfileを作成

application_root下に下記のファイルを作成

“`
# イメージのベースラインにRuby2.7.0を指定
FROM ruby:2.7.0
# Railsに必要なパッケージをインストール
RUN apt-get update -qq && apt-get install -y build-essential nodejs
RUN gem install bundler
# ルートディレクトリを作成
RUN mkdir /app
# 作業ディ

Railsで起きたRoutingErrorの対処について

RailsでRoutingErrorが起きた。

##今回の対処法

至って問題はシンプルで、<%= %>内のpathに問題があった。

具体的には

“`example.html.erb
<%= link_to "Delete", post_path(@post), method: :delete, data:{confirm: "Are you sure?"}, class:"button is-danger" %>
“`
としないといけなかったところで、

“`example.html.erb
<%= link_to "Delete", edit_post_path(@post), method: :delete, data:{confirm: "Are you sure?"}, class:"button is-danger" %>
“`
としてしまっていた。

##今後の対策
RoutingErrorが起きたら、まずPathを確認する。

Stripeの有料プラン変更時の挙動のまとめ

Stripeの実装にあたって、実際に自分で開発しているサービスのケースに合わせた場合のユースケースメモ。
参考: https://qiita.com/AkihikoNambu/items/bb496612f3044b2b3e1e

************************************************
有料プランをアップグレードするケース(前払い制)

(例) ライトプラン(¥980) -> ベーシックプラン(¥2980)に変更するケース
4/1 ライトプランの料金(¥980)を支払う
4/15 ベーシックプランへ変更
差分を計算
ベーシックプラン => 4/15 ~ 4/30 => (2980 * (15/30)) => 1490
ライトプラン 4/1 ~ 4/15 => (980 * (15/30)) => 490
差分: 1490 – 490 = 1000
5/1 プレミアムプランの料金 + 差分を請求 = 2980 + 490 = 3470円が請求される

********************************

[Rails] OpenAPI (swagger) で書いたAPIドキュメントをテストする。

## この記事について
OpenAPI (swagger) がかなりイケてるという情報を得て、導入・テストするまでにいろいろ模索したので、その備忘録として書き留めておきます。
「これからRailsプロジェクトにOpenAPIを導入したい!」と思っている方の参考に、少しでもなればなと思います。

また、僕なりにググって、「これがいいんじゃないかなぁ」と思ったものなので
「こっちのほうがいいよ!」ってのがあれば、ぜひ教えてください。。

OpenAPIの記法については、割愛します。ググれば山のようにあるので。。

## 構成
サーバー:Rails(with docker)
APIドキュメント:OpenAPI
テスト:RSpec + committee (committee-rails)

## OpenAPIを導入する
導入といっても、やることは大してありません。
docker hubに、公式イメージでswagger-uiがあるので、それを使います。([参照](https://hub.docker.com/r/swaggerapi/swagger-ui))

“`yml
swagger:

演算子

・論理演算子(!, &&, ||, not, and, or)

!a # a が false であれば
a && b # a かつ b が true であれば
a || b # a または b が true であれば
not a # a が false であれば
a and b # a かつ b が true であれば
a or b # a または b が true であれば

・比較演算子(==, !=, <, >, <=, >=, <=>, ===)

a == b # a と b が等しい
a != b # a と b が等しくない
a < b # a が b よりも小さい a > b # a が b よりも大きい
a <= b # a が b 以下である a >= b # a が b 以上である

・代入演算子(=

【Rails】メールアドレスを記憶する

ログインフォームに「次回からメールアドレスの入力を省略する」というチェックボックスをつけて、次回ログインフォームにアクセスした時にメールアドレスが自動で入力される機能を実装したので、実装方法を記録します。

###全体の流れ
– ログインフォームにチェックボックスをを設置
– チェックされた状態でログインしたら、メールアドレスを暗号化してcookieに保存
– 次回以降のログイン時、cookieにメールアドレスが保存されているかを確認して、あれば利用
– チェックを外した状態でログインしたら、cookieに保存されているメールアドレスを削除

###Controller
“`rb
def create
customer = Customer.find_by(email: params[:session][:email].downcase)
if customer&.authenticate(params[:session][:password])
if params[:session][:remember] == ‘1’
#cookieを登録
c

[Rails,位置情報] activerecord-mysql2spatial-adapterの使い方

しずおかオンラインでWeb開発しているkazuomatzです。

Rails + MySQLで位置情報を扱う需要は、少なからずあるかと思います。

Rails + MySQLで位置情報を扱う場合、[activerecord-mysql2spatial-adapter](https://github.com/rgeo/activerecord-mysql2spatial-adapter)が定番のGemかと思うのですが、このGemの開発が止まっていて、Railsのバージョンアップのたびに、有志の開発者の方が本家からBranchしたバージョンを独自リリースしている状態というエントリーを[記事](https://qiita.com/kazuomatz/items/884c7b5e64a3b7532204)にしたのですが、あまり反響がなかったので、そういう需要はもはやないのかなと思っておりました。

そんな中、この記事を見た方から、そもそもactiverecord-mysql2spatial-adapterの使い方がまとめれているところがあまりないという問い合わせがあったので、簡単に書き留めてお

ログイン機能の実装(SNS認証機能の追加)

記事保留

Capybaraでtrタグのtdタグを指定してテストする方法

# はじめに
`tr`1行目の`td`3番目と指定したいときに悩んだんで備忘録として残しておきます。

# よく見かけるやつ
“`xxx_spec.rb
all(‘tbody tr’)[0]
# tbodyの中の一行目のtrを取得する

all(‘tbody td’)[0]
# tbody中から、tdの一つ目を取得する
“`

上記のコードを自分はよく使ってます。
ただ、`日付`を`each`でまわして`table`を作成したときに、`n番目のtd`を取得したいときに問題発生。
1月時点で1行目のみテストする場合は問題ないですが、`tr`の2行目に`td`要素があるかどうかみたいなとき、
1月は31日までなので、2行目まで数えようとしたら、`all(‘tbody td’)[32]`のようにわざわざ要素を数えて、みたいなことしてると3行目の`td`数えるとかしんどーー!!ってなります。
ちなみに、こういう場合月によって末日が変わるので、`travel_to`でテストを書く日付を固定しないといけなくなるので良くないかもしれないです。

# 実装
“`xxx.html.haml
%ta

RailsアプリケーションにjQueryを導入する方法

RailsでjQueryを導入する方法について記述していく。
アプリケーションを立ち上げて毎回調べるのも面倒なので備忘録として。

## 手順
① 下記gemをGemfileに記述する。

“`:Gemfile
gem “jquery-rails”
“`

② ターミナルでbundle installを実行する。

“`:ターミナル
$ bundle install #bundleでも可
“`

③ Gemfile.lockに下記が追加されている事を確認する。

“`Gemfile.lock
jquery-rails(n.n.n) #nはinstallした時によってバージョンが異なる為
“`

④ application.jsに //= require jquery と //= require jquery_ujs の2行を追加する。

“`:application.js
//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require jquery #これを追加
//=

Docker for Windowsでwebpack-dev-serverのオートリロードが効かない

# 環境
Ruby on Rails
React
Docker for Windows

# 問題
Dockerコンテナ上でwebpack-dev-serverを動かしている時に、
Macでは、ホストでのファイルの変更を検知してauto-reloadされるのに、
Windowsではauto-reloadされない。

# 調査
Docker for Windowsのボリューム機能がうまくいっていないらしい。
それにより、ホスト側で行ったファイルの変更がコンテナ内に通知されず、auto-reloadが機能しない。

# 対処
WindowsのローカルにPython環境を構築し、以下のライブラリをインストール。

[merofeev/docker-windows-volume-watcher](https://github.com/merofeev/docker-windows-volume-watcher)

“`
$ docker-volume-watcher コンテナ名 C:\some\directory
“`
Windows上で実行することで、代わりにファイルの変更をコンテナ

Nginx経由でRailsをAWS環境で起動できないエラー時にまず確かめたいこと、使えるコマンド。

表題の内容に関して、チェックすべきポイントを
備忘録として以下に記す。

###そもそもURLは正しいか?
Nginx導入の際に、unicorn.rb内の記述を変更していると思うので、
改めてブラウザからElastic IPでアクセスしてみる。

###データベースは起動しているか?
Mysql使用時は以下を実行して確認。

“`ターミナル:ターミナル
[ec2-user@ip-XXX-XX-XX-XXX <リポジトリ名>] $ sudo service mysqld start
#上記実行後running…と表示されていればOK
“`
###Railsは起動しているか?
unicorn使用時には以下を実行して確認。

“`ターミナル:ターミナル
[ec2-user@ip-XXX-XX-XX-XXX <リポジトリ名>] $ bundle exec unicorn_rails -c config/unicorn.rb -E production -D #エラー文が表示されなければOK

master failed to start, check stderr log for d

【第9章】Railsチュートリアル 5.1(第4版) 発展的なログイン機能

#はじめに
筆者は非IT業界から独学でRails学習中で、備忘録目的で執筆しています。
個人的に本章はこれまでの章より難易度が高かったです?(2周目確認・整理が必須と感じました、不足等あれば訂正致しますのでおっしゃっていただければ幸いです)
筆者は[安川さん](https://twitter.com/yasulab)講義の動画版を模写するような形で学んだため、演習でなく全体を流す程度に参考にしてもらえたら嬉しいです。

<参考>
[Ruby on Rails チュートリアル 第9章 永続的セッション(cookies remember me 記憶トークン ハッシュ)を解説](https://qiita.com/bitcoinjpnnet/items/639cbace7cb806379452)
個人的に非常に理解しやすい記事でした。
(Cookieの攻撃手法などは改めて追記したいほどです)

#9.1 Remember me 機能

##Remember me とは
主にアカウント認証に用いられる機能の一つで、ユーザーがログイン時に入力したアカウント情報をサーバ側で持つ(UI視点での)機能

rspecの始め方

Gemfileに

“`
gem ‘rspec’
group :development, :test do
gem ‘rspec-rails’
end
“`

コマンドラインで

“`
$ bundle install
$ bundle g rspec:install
“`

webpackerでBootstrapをRailsアプリに反映させたい!

webpackerはwebpackをRailsで使えるように作られたgemパッケージである。
先日、以下の記事に従いwebpackerを使ってBootstrapをRailsのアプリにインストールしたのだが、上手く反映されていない。

[RailsでBootstrapとFont-AwesomeはWebpackerで今時っぽく使おう](https://qiita.com/rhistoba/items/f724dae231d7e28bf477)

結果として、windows環境で開発を行っていたことが原因であった。
この記事ではwindows環境でwebpackerを使ったBootstrapの反映方法について示す。
(※2020/01/18に上記記事の執筆者の方からご連絡を頂き一部を修正)

## 前提
###僕のスペック
– プログラミング学習を始めて1ヶ月
– HTML/CSS/Javascript/Ruby/Railsをprogateで一応学習済
– Ruby on rails でポートフォリオを作成中

###開発環境
– 端末 : LENOVO ideapad 530S-14AR

[Rails]serializeなcolumnのdefault値を空の配列にしたい。

# やりたいこと

“`ruby:migration
class Users < ActiveRecord::Migration[5.1] def change create_table :users do |t| t.integer :id t.string :hoges, null: false, default: [] # これ end end end ``` でもこれじゃ ``` == 20200109052420 Users: migrating ============================ -- create_table(:search_histories) rails aborted! StandardError: An error has occurred, all later migrations canceled: can't quote Array /Users/lyrical_school/project/disappearing_planet/db/migrate/20200109

[Rails] ActiveAdmin編集フォームをカスタマイズする!

最近の勉強で学んだ事を、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
Webエンジニアの諸先輩方からアドバイスやご指摘を頂けたらありがたいです!

#編集できる項目をカスタマイズしたい
ActiveAdminで作成した管理画面で編集できる項目を指定して表示するのが今回の目的です!

[公式ドキュメントによると](https://activeadmin.info/5-forms.html/)
formの出力を調整するやり方が書いてありました。

“`app/admin/users.rb
ActiveAdmin.register User do
省略〜
PERMIT_PARAMS = [:name, :email, :gender, :age] # 編集を許可するフィールドを定義
permit_params PERMIT_PARAMS

form do |f|
f.semantic_errors # エラーメッセージ表示
f.inputs do
PERMIT_PARAMS.each {|attr