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

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

Cloud9でRails 6.0のSeleniumとGoogle Chromeを使える設定しましょう!

みなさん、お疲れ様です!

Cloud9で元気いっぱいで新しいRails6アプリを作ろうと思っている方、
必ずテストも作りたいよね!

もうグーグルクロームをインストールしていますよね? このバッシュスクリプトはめっちゃ便利です。

“`bash
$ curl https://intoli.com/install-google-chrome.sh | bash
“`

そしてSeleniumのシステムテストを稼働すると、このエラーはありますでしょうか?

“`ruby
$ rails test:system
Run options: –seed 47710
# Running:
E
Error:
WelcomeTest#test_visiting_the_index:
Selenium::WebDriver::Error::UnknownError: unknown error: Chrome failed to start: exited abnormally
(unknown error: DevToolsActivePort file doesn’t exist)

元記事を表示

WebMockを使って外部API接続をスタブ化する

# 概要
APIはJavaで実装して、Javaから返ってきたjsonをRailsで受け取ってRails側でそのjsonデータを表示するという流れにしたく、Railsの実装をしている時のテストや、いちいちJavaを起動させなくていいようにスタブ化したのが目的です。

[Rails開発でWebMockを使ってAPIアクセスをスタブ化する](://dev.classmethod.jp/server-side/rails-development-with-webmock/)からのコードを引っ張ってきただけなので、リンク先の解説みた方が断然わかりやすいです。

# 実際のコード
“`ruby:api_stub.rb
module ApiStub
require ‘webmock’

WebMock.enable!
# アプリケーションコードに`call_get_api`という名称の外部API呼び出し実装を含むメソッドがあることして、ここで同名のメソッドを作成してstub登録します。
def call_get_api
WebMock.stub_request(:any,

元記事を表示

Rails 6ではsend_data/send_fileメソッド呼び出し時にERB::Util.url_encodeは不要です

## Rails 6にアップグレードすると発生する問題
Railsでファイルダウンロード機能を実装するときは`send_data`メソッドや`send_file`メソッドがよく使われます。
このとき、ファイル名に日本語(正確には非ascii文字)が含まれていると、IEやEdgeで文字化けします。
そのため、Rails 5.2以前では以下のように`ERB::Util.url_encode`メソッドを使って文字化けを防いでいました。

“`ruby
class FooController < ApplicationController # ... def download # ... # Rails 5.2以前ではurl_encodeをかけないと、IEやEdgeでダウンロードしたときに # `縺ォ縺サ繧薙#.txt`のようなファイル名になってしまっていた send_data(your_data, filename: ERB::Util.url_encode('にほんご.txt'), disposition: 'attachment') en

元記事を表示

カラムを追加してpgからschemaにdumpさせてみました

##記録用

railsでgenerate migrationコマンドを使って、自動的に作成していましたが、その方法で作成しない方針だったため、migrationファイルからDBにカラムを追加したり、コメントを入れたり、schemaディレクトリにバックアップファイルを作成してその中にdumpさせました。

完全に理解していないですが、記録用と手順ややったことを忘れないためにも残しておきます。

##migretionファイルでカラムの追加

###カラムの追加

“`
ALTER TABLE テーブル名 ADD COLUMN カラム名 データ型 型名 ;
COMMENT ON TABLE テーブル名 IS ‘コメント’;
“`

###SQLで確認
“`
\d (テーブル名)
\d+ でコメントも確認することができる
“`

列 | 型 | 修飾語

↑のような形式で追加したカラムを確認することができる

##schemaファイルにdumpするとき

データベースを指定してダンプする場合は、pg_dumpを使用する

“`
pg_dump DB名 –schem

元記事を表示

【Rails】 DataTables 動的にカラムを変更する方法

# はじめに
Railsアプリケーションで DataTables を使う方法を以前にまとめさせていただきました。
DataTables を使ったテーブルのカラムを動的に変更したい需要があると思いますが、まとめられている記事を見かけませんでしたので、こちらにてまとめさせていただきます。
この方法を理解していれば、開発時間を極端に減らして高機能なテーブルを提供することができます。

なお、今回の方法は少し強引にカラムを動的に変更しています。
もし、もっといい方法があるということをご存知の方はコメントをいただければ嬉しいです。

# 動的にカラムを変更する方法
## 前提条件
下記リンクにてDataTablesを実装していること。
このリンク先のコードを元にして、動的にカラムを変更する方法をこちらの記事にて特記したいと思います。

* 【Rails】DataTables 実装方法
* https://qiita.com/syukan3/items/5ac9f0d1b43334b5eb13

## 値を変更する方法
動的にカラムを変更するには、“`users.coffee“`のコー

元記事を表示

[bundler: command not found: unicorn_rails Install missing gem executables with `bundle install]AWSのEC2サーバ上でRailsに追加したgemfileが反映されない時の解決例

<エラー文>
スクリーンショット 2020-01-21 7.03.08.png

#このエラーの原因で考えられること
local環境でしかgemfileが反映されていないことが考えられます。
具体的には下記のことにより起こっていると考えられます。

1.rbenvのrehashし忘れ
2.bundlerの入れ忘れ
3.githubへの反映し忘れ(commitとpushのし忘れ)

#解決方法

####1.rbenvのrehashし忘れ
rbenv(rubyの環境構築)について更新をすれば解決します
EC2サーバー上で下記のコマンドを入力してください

“`
[ec2-user@ip-xxx-xx-xx-xxx chat-space$ gem install bundler -v 2.0.2]$rbenv reh

元記事を表示

rails+froalaエディタ使用の注意

表示させる部分にはクラスに’fr-view fr-element’を付ける

froalaエディタは、とても高機能のエディタである。

ブログアプリで使用するとき、form画面ではとくに問題ないが、その内容を表示させるときに思うように表示されないときがある。
それは、form画面ではデフォルトで

“`

“`

で囲まれているが、表示させるときはない。
画像の左寄せ、中央寄せ、右寄せの機能がうまく表示されないのはこのせいである。
なので表示させたいページで同じようにdivで囲めばよい。

元記事を表示

Rails6 アプリからメールを送信する デプロイ環境編

# 目的

– Rails6で作成したアプリをデプロイした時に当該アプリからメールを送信する方法をまとめる。

# 前提条件

– 下記の方法、またはそれに準ずる方法でローカル環境にてテストメールが送信できる状態のRailsアプリが存在すること。
– [Rails6 アプリからGmailのメールサーバからメールを送信する ローカル環境編](https://qiita.com/miriwo/items/06d7d69aff47fd02fbc1)
– メール送信を行いたいアプリがすでにherokuでデプロイされていること

# 作業期待値

– herokuでデプロイしているアプリからメールが送信されるようにする。
– メール送信内容は[Rails6 アプリからGmailのメールサーバからメールを送信する ローカル環境編](https://qiita.com/miriwo/items/06d7d69aff47fd02fbc1)と変わらずにクラウドサーバであるheroku側の設定を主に行う。
– herokuでのデプロイ方法の基本は下記の本を参考に構築を行なった。個人開発の公開時のノ

元記事を表示

Rails SQliteからmysqlへ変更(途中から)

#アプリ作成後にmysqlに変更する方法

MySQLを起動して接続の確認

“`
$ mysql.server start
“`

起動後、接続できるか確認

“`
mysql -u root -p
“`

Railsで利用するユーザーを作成します。

“`
create user ユーザー名@’localhost’ identified by ‘パスワード’;
例 (create user railsuser@’localhost’ identified by ‘railspass’;)
“`

ユーザーが作成されたことが確認

“`
select User,Host from mysql.user;
“`

権限の付与を行います

“`
grant all on *.* to ユーザー名@’localhost’;
“`

#設定ファイルの変更
“`ruby:config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: 5
username: ユーザー名

元記事を表示

Webサービスをインターネットに公開する(cloud9からHerokuにデプロイ)

##Herokuについて
– [https://jp.heroku.com](https://jp.heroku.com)
– Paas(Platform as s Service)と呼ばれるクラウドサービス
– 元々、Rubyのアプリケーションをホスティングするサービス
– PHP等、他の言語にも対応

## デプロイの準備
**設定箇所**
1. Gemfile
2. config/database.yml
3. config/environments/production.rb
4. config/routes.rb

**1.Gemfile**

Gemfileにあるgem’sqlite3’を切り取って group :development, :test doに貼り付ける
gem ‘pg’, ‘~> 0.18.4’を追加する

“`ruby:Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger consol

元記事を表示

【Rails】セキュアパスワード(has_secure_passwordメソッド)について

#概要
個人的にアプリ作成時にテーブル設計で`password_digest`をカラムとして、セキュアパスワードを利用する前提でテーブル作成していましたが、改めてセキュアパスワードについて理解しておくためまとめていきます。

#セキュアパスワードとは
パスワードの値をDB上にそのまま保存することはセキュリティ上問題があります。
そのためセキュアパスワードという**パスワードとパスワード確認をユーザーに入力させて、
その2つの値をハッシュ化したものをデータベースに保存するという方法**で脆弱性を回避します。

このハッシュ化というのは{key => value}のハッシュではなくて、ハッシュ関数というものを利用して入力されたパスワードを異なる値に変更する処理のことを指します。
パスワードをランダムな文字列に変換して、DBに保存するということ。

#セキュアパスワードの実装方法

##has_secure_passwordメソッドをモデルに記述

`has_secure_password`メソッドを利用して、`password_digest`カラムにハッシュ化した値を保存するという方法を

元記事を表示

devise ユーザーのプロフィール画面作成と編集(デフォルトをカスタマイズ)

# はじめに
deviseを導入の仕方を学び、デフォルトのままだとユーザーフレンドではないと思い、deviseのカスタマイズをしようと思います。

**・sign up(アカウント登録)時にユーザーの名前も一緒に登録!
・users/showで「名前」「メールアドレス」「プロフィール」の表示!
・users/editで簡単編集!**

上記の3つについて、rails初心者目線で書いていきたいと思います。
## 完成イメージ
スクリーンショット 2020-01-20 17.57.35.png
スクリーンショット 2020-01-20 18.10.25.png【Rails】Strong Parametersの書き方について

#概要

Strong Parametersについて、セキュリティに強い値の取り方というくらいの認識で
あまり意識せずに書いていたため、改めて必要性と書き方について纏めてみました。

#Strong Parametersについて

Web上から入力された値をセキュリティ面で安全に受け取るための仕組みであり、値の正当性をチェックしてくれます。
そうして指定した値以外を受け取らないようにすることで、攻撃を防ぐというセキュリティ対策です。
1つのモデルに対して属性をまとめて取得するというRailsに元々搭載されているマスアサイメント機能の脆弱性を防ぐためにできた機能です。

例えば、UserコントローラーでCreateアクションを起こすとき、
渡すカラムが増えた場合、都度paramsを追加していくのは手間がかかります。

“`ruby
def create
User.create(name: params[:user][:name], email: params[:user][:emails], password: params[:user][:password])
end
“`

元記事を表示

Dockerを使ってRuby2.7&Rails6を構築

# はじめに
2020/01/20時点での最新安定版のrails開発環境の構築の記事がなかったので。

[【Imagemagick対応】Dockerを利用して、Rails環境を作成](https://qiita.com/NA_simple/items/5e7f95ae58eec5d20e1f)

基本上記の記事のままです。
ただ、上記の記事はRuby2.6&Rails5.2.2で、そのままバージョンを書き換えるだけではうまく動作しなかったので、動作できるようにしたインストール資材を記載しておきます。
参考までに上記記事からの変更点も記載しておきます。

コンテナ立ち上げ以降は参考記事の手順のまま実施できます。

# インストール資材
## Dockerfile
“`:Dockerfile
FROM ruby:2.7

ENV RUNTIME_PACKAGES=”linux-headers libxml2-dev libxslt-dev make gcc libc-dev nodejs tzdata postgresql-dev postgresql” \
DEV_PACKAG

元記事を表示

railsにおける get と post の違い

getはデータベースを変更しないアクション
postはデータベースを変更するアクション

元記事を表示

Rails5.2.3でjQuery導入

# jQuery導入手順

gemfileに記述

“`ruby:Gemfile
gem ‘jquery-rails’
gem ‘jquery-ui-rails’
“`
“`
bundle
“`

application.jsに記述

“`ruby:application.js
//= require jquery
//= require jquery_ujs
“`

#### リロードしないと機能しない場合

Gemfile の gem ‘turbolinks’ をコメントアウト
application.js の//require turbolinks を削除
“data-turbolinks-track” => “reload”(application.html.erb)
とする。

#### 個別ファイルの読み込み

application.jsに記述

//= require_tree .

元記事を表示

【第10章】Railsチュートリアル 5.1(第4版) ユーザーの更新・表示・削除

#はじめに
個人的な理解・備忘録を目的としてます。
筆者自身は[動画版Railsチュートリアル](https://railstutorial.jp/#screencast)で進めているため、アプリ作成中コード・ブランチ名などの若干の違いがありますので参考程度に流し見して頂けたら嬉しいです。
理解不足のため、何かありましたらコメント等ご指摘してくださると幸いです(^_^;)

#10.0 目標
未実装だったedit、update、index、destroyアクションを加え、RESTアクションを完成させる。

その他 個人的進行
単数形と複数形
モデル(概念的)→単
それ以外→複数(ほぼ全部)

#10.1 ユーザーを更新する
##10.1.1 編集フォーム
編集フォームのモックアップ
([公式](https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#cha-updating_showing_and_deleting_users)より参考)

![スクリーンショット 2020-01-17 13

元記事を表示

[Rails] chartkick の Tips 2つ

# bar_chart で棒の幅を一定にしつつ、グラフのheightを棒数に応じた可変長にする方法

私の場合は、以下のように“height“を設定すると、上手くいきました。
“@items.size * 2“で棒数に応じるようにし、
“ + 2“は、グラフのx軸メモリなどの高さに関するもののはずです。

“`haml:〇〇.html.haml
= bar_chart @items, height: “#{@items.size * 2 + 2}rem”
“`

ちなみに、単純に

“`haml
height: “#{@items.size * 2}rem”
“`

にすると、棒数が増えるにつれて段々棒の幅が太くなってしまいます。

# bar_chart で、なぜか勝手に項目順がソートされてしまう場合

項目名がint型だと勝手にソートされてしまいました。
事前に“to_s“でstring型に変えておけば問題無いようです。

元記事を表示

JavaScriptの差分ライブラリを使ってERBに入れてみた

“`rhtml




vue_pager