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

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

Ruby初心者がいきなりRailsするときのMemo

## 初めに
これまではPHPかPythonでの開発がほとんどだったのですが、様々な事情により、Ruby on Railsの案件に取り組むことになりました。これまでよくやっていたPython + Flask構成と比較しながらRuby on Railsを勉強しているのですが、その試行錯誤を残しておきたいと思います。内容は随時更新します。

## 目次

* Rubyの環境構築
* Railsの導入

## Rubyの環境

Pythonでは、以下の環境を使っていました。

“`
* pyenv(Pythonのバージョン管理)
* pipenv(仮想環境構築+Packageの管理)
“`

Rubyでそれぞれに対応するのは、(というかPythonのそこら辺のツールはRubyのツール群に触発されて開発されたものが多いので、こちらのほうが大元というべきなのですが、)

“`
* rbenv(Rubyのバージョン管理)
* bundler(gemの管理)
“`
です。一般的なRubyプロジェクトは、bundlerを用いて

“`shell
mkdir PROJECT_DIR
cd PR

元記事を表示

Railsの便利機能「Application Template」で rails newと初期設定を自動化できた!

Railsアプリの新規作成から初期設定までを`rails new`と`rails db:create`だけで完了させます。
ひたすらの設定をコピペコピペ、ちょっとしたtypoでRailsAbort!によるグツグツから開放されます。
テンプレートファイルは1つにまとめておけるので、Railsアプリ新規作成時の手順書としてもメンテできて一石二鳥です。

## 環境
– MacOS 10.14.6
– Ruby 2.6.3
– Rails 5.2.3
– MySQL 8.0.16

## 方法

RailsのApplication Templateという機能を使用します。

## やること

– ApplicationTemplateファイルをつくります。
– `rails new -m` コマンドをうちます。
– `rails db:create` コマンドをうちます。
– 以上(*´∀`)

## 手順

#### ①ApplicationTemplateファイルをつくる

プロジェクトフォルダのルートに`app_template.rb`を新規作成します。

むずかしく考えなくていいです

元記事を表示

rescueでエラーを拾ってくれない問題

#BackGround
[Postman](https://www.getpostman.com/)を使ってRailsのアクションを設計どうりに処理してくれるかテストしていました。
問題になったのはこの“`user_controller“`のshowアクション

“` user_controller.rb
class UsersController < ApplicationController def show @user = User.find(params[:id]) render json: { status: 'success', data: @user } rescue ActiveRecord::RecordNotFound render json: { status: 'error!', data: @user.errors } end private def user_params params.require(:user).permit(:user_name,:email,:password,:pa

元記事を表示

【Ruby on Rails】gem「devise」のREADMEを読んでみた

#はじめに

オープンソースのソフトウェアやプログミング言語、ライブラリには、間違いなく公式のドキュメントが存在します。
学習のために無料のラーニングシステムを使うこと、書籍を購入することもいいですが、

**個人的には、公式ドキュメントには必ず一度は目を通すべきもの**だと思ってます。

なぜなら出版されてしまった本とは異なり、常に最新の状態にアップグレードされ、多くの人が目にするので間違いが日々修正されているからです。

**英語が読めない? 長くて読む気がでない? ならばググりましょう!** 
例えば英語がわからないなら、この世の中便利な時代なので、英語のドキュメントについてすでに読んだ人の記事などが検索してヒットするはずです)

#やったこと

Ruby on Railsの開発環境下で、**認証機能を実装したい際に利用することが多いgem「devise」**のREADMEを読んでみました。
※2019年10月時点の情報です。

https://github.com/plataformatec/devise

# deviseが持っているモジュール(簡単に言えば機能)

1.

元記事を表示

mysqlが起動できない!のエラーが出るときの対処法

## 事象
mysqlを起動しようとして以下のコマンドを打ったときに
`$mysql.server start`

mysqlが起動できずに以下のエラーが置きます
`ERROR! The server quit without updating PID file`

エラー通りに
`/usr/local/var/mysql/`
にpidファイルを作っても起動ができません。

## 対処法
以下のファイルを消してから
`/tmp/mysql.sock`

mysqlの起動を行いましょう
`$mysql.server start`

## 対処法までのたどり着き方
エンジニアはエラーの対処までのたどり着き方なのでみていきます。

まずmysqlのlogファイルをみてみましょう。
以下のファイルをみてみましょう。
`$tail -f /usr/local/var/mysql/***.err`

このコマンドを打ちながら別のターミナルタブを開いて
`$mysql.server start`
を打ってみましょう。

そうすると
`[ERROR]`
となっているところがあります。

そこに `my

元記事を表示

1対多のモデル間のテーブルに一つのformで一括登録する

## やりたいこと
1対多の関係を持つモデルに対し、同時にレコードを登録する。
検索した際によく出てきたaccepts_nested_attributes_forは使わず、一括登録をするためのモデルを別で用意して実装。

## 前提条件
下記のように、一人のcustomerが多くのreservationsを持つ、1対多の関係。

“`models/customer.rb
has_many :reservations
“`
“`models/reservation.rb
belongs_to :customer
“`

## 考え方
1. customerとreservationを一緒に扱うためのモデル(customer_form)を作成。
2. 作成したモデル内で、架空のテーブルを作成し、2つ同時に登録するためのsaveメソッドを定義する。※実際はテーブルは存在しません。イメージです。
3. customerコントローラでnewアクション、createアクションを定義。その際、②で作成したモデルのsaveメソッドを使う。
4. viewを作成する。
5. レコードを登録した後に

元記事を表示

resourcesメソッド

## 意味
CRUD (Create, Read, Update, Delete) 操作に対応付けられるルール
index, show, new, edit, create, update, destroy の
7つのアクションへのルーティングを一挙に宣言する

## 使用法
“` routes.rb
resources :photos
“`

| HTTP動詞 | パス | コントローラ#アクション | 目的 |
|:–|:–|:–|:–|
| GET | /photos | photos#index | すべての写真の一覧を表示 |
| GET | /photos/new | photos#new | 写真を1つ作成するためのHTMLフォームを返す |
| POST | /photos | photos#create | 写真を1つ作成する |
| GET | /photos/:id | photos#show | 特定の写真を表示する |
| GET | /photos/:id/edit | photos#edit | 写真編集用のHTMLフォームを1つ返す |
|

元記事を表示

画像(複数)アップロードCarrierWaveを使ったmodelのRspec

複数の画像のRspecテストでつまずいたので備忘録です!

###参考
>URL:(https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Use-test-factories)

>[画像アップロード CarrierWaveを使ったmodelのRSpecを通す](https://qiita.com/motty93/items/5cbc46ce79a502fcaa65)

###動作環境
– Ruby 2.6.0
– Rails 5.2.3
– Mysql 5.7
– macOS Mojave 10.14.6

##モデルのアソシエーション
“` post.rb
class Post < ApplicationRecord belongs_to :user mount_uploaders :pictures, PictureUploader validates :title, presence: true, length: { maximum: 30 } validates :descripti

元記事を表示

Provideメソッド

## 意味
供給する, 与える, 規定する

## 使用法
provideメソッドでパラメータを引き渡し

“` home.html.erb
<% provide(:title, "Home") %>
“`
yieldメソッドで受け取る

“` application.html.erb
<%= yield(:title) %>
“`

元記事を表示

RailでCSV出力する方法

# RailでCSV出力する方法
RubyのCSVを利用すれば簡単にCSV出力が可能です。

## 環境
ruby 2.6.3
Rails 6.0.0

# View
“` ruby
# ポイントは引数にformat: :csvを指定することです。
# これでcsv形式でのリクエストを送ることができます。
<%= link_to "csvで出力する",hoges_path(format: :csv) %>
“`

# Controller
“` ruby
# CSVクラスを利用するためにrequireは必要になります。
# https://docs.ruby-lang.org/ja/2.0.0/class/CSV.html
require ‘csv’

class HogesController < ApplicationController def index @hoges = Post.all # respond_toでリクエストに応じて出力のフォーマットを分けるように実装します。 # view側のlink_toの引数にformat: :csvを

元記事を表示

railsチュートリアルをしていく~1章~

##概要
春にrailsチュートリアルをしていたのだが、夏に海外で2ヶ月遊んでからPCを触ることなく、怠惰の日々を送っていたため、何もかも忘れたので、今更必死にやっていく。今度は記事に書く。そしたら続けれるはず…

##1章 hello_app

まず、hello_appアプリの作成

“`terminal
$ rails new hello_app
$ ls hello_app #hello_appの中身を確認
Gemfile app/ db/ public/
Gemfile.lock bin/ lib/ test/
README.md config/ log/ tmp/
Rakefile config.ru package.json vendor/
“`

次にGemfileを編集する

“`terminal
$ cd hello_app #hello_appディレクトリに移動
$ open gemfile #Gemfilを

元記事を表示

Rails/統合テストのScreenshot全画面表示設定

## 概要
アプリケーションを作ってごりごりシステムスペックを書いているわけですが。
テストコードはちゃんとテストとして成立しているかチェックしながら書いていくことが多いと思います。

そこでcapybaraを使った統合テストでは、failedが出るとスクリーンショットを取ってくれます。
このスクリーンショットと照合しながらテストコードの性能をチェックしていくことになるのですが・・・

しかしこのスクリーンショット、デフォルトだと小さい!
画面の下の方にリンクを置いてるのに上の方しか表示されねえ!

ってことで、設定方法をまとめとこうかなと思います。

## 設定方法

“`ruby:spec/spec_helper.rb
require ‘capybara/rspec’

Capybara.register_driver :selenium_chrome_headless do |app|
options = Selenium::WebDriver::Chrome::Options.new

[
“headless”,
# ここの倍率を変更すれば、スクリー

元記事を表示

Rails6.0でactiverecord-mysql2spatial-adapterを使う

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

弊社では、開発するモノとして位置情報を扱うサービスが比較的多いです。

Rails開発において、MySQLで位置情報を扱うGemである[activerecord-mysql2spatial-adapter](https://github.com/rgeo/activerecord-mysql2spatial-adapter)にお世話になってきましたが、このGem、開発がほぼ止まっているようで、最後の更新が2017年の7月で、サポートされているRailsのバージョンは4.1です。

ただ、いろいろな開発者の方が元のリポジトリーをforkしてRailsのバージョンに追随しており、[こちら](https://github.com/sebastianiorga/activerecord-mysql2spatial-adapter)のリポジトリで、[Rails4.2](https://github.com/sebastianiorga/activerecord-mysql2spatial-adapter/tree/rails-42

元記事を表示

Rails6が立ち上がらない!Node.js, webpacker, yarnのインストール 【開発日記】薬価検索アプリno.5-2

前回の内容はこちら。
[【開発日記】薬価検索アプリno.5 〜Railsでアプリケーションの雛形作成、mySQLエラー、GitHubの設定まで〜](https://qiita.com/pharma_tech3/items/0d6f14e889a40dffee3b)

開発背景などはこちら
[【開発日記】薬価検索アプリno.1 〜開発概要→企画〜](https://qiita.com/pharma_tech3/items/51c9a670c605098bc3bf)

##現在の進捗状況
1.必要な機能の洗い出し
2.必要な画面設計
3.データベース設計
4.Railsでアプリケーションの雛形作成 ⬅︎今ココ
5.大きな機能から順に実装 
6.テストコードを書いて動作を担保する
7.リファクタリングして整理する
8.デプロイ

#rails sしてみたら…
前回、 `rails new` してアプリケーションの雛形を作りました。
そのまま勢いでrails sしたのですが…

“`terminal
=> Booting Puma
=> Rails 6.0.0 applicat

元記事を表示

10月31日 学習進捗状況

# 学習
– 部分テンプレートはHTMLの部分を共通化することで、無駄なくビューファイルを作成できる
_post.html.erbと記述することで部分テンプレートをループできる

– renderメソッドとは部分テンプレートを呼び出すメソッドでその中でも下記の2種類がある
① partialオプション…部分テンプレートを表示することができる
(例) https://gyazo.com/a409ce2e57b71ee2131f2656f17eb9a8
②localsオプション…部分テンプレート内で変数を使うことができる
(例) https://gyazo.com/37ef08a5120660ec68aaf61e2c606604

renderメソッドを使いこなすことができればコードの省略ができ、また修正がある場合でも少ない箇所の修正で済むので、非常に便利なメソッドですし、ブログやチャットなどのコメント欄などはユーザーの数が多くなればなるほど特定のビューを使い回す回数も多くなるので、部分テンプレートをrenderメソッドで呼び出せば動作の速度が向上すると感じました。

# 感想
カリキュラ

元記事を表示

SidekiqをActive Jobから利用する [翻訳]

# SidekiqをActive Jobから利用する

最終更新 2019/09/18 編集者 Mike Perham

Rails 4.2からActive Jobが導入されました。Active Jobはジョブキューシステムのための標準的なインターフェースです。
Active JobはSidekiqと一緒に利用することができます。

## Active Jobのセットアップ

Active Jobのアダプターとして `:sidekiq` を指定する必要があります。そうしないとデフォルトの `:async` という値になってしまいます。
この設定は `config/application.rb` に記載してください。

“`ruby
class Application < Rails::Application # ... config.active_job.queue_adapter = :sidekiq end ``` 新しいジョブの生成にはRailsのジェネレーター機能を使うことができます。 ```shell rails generate job Example ```

元記事を表示

【Ruby on Rails】テーブル名を変更するときにやること一覧&ステップ

## やりたいこと
– テーブル名を修正する
– モデルやコントローラーも名前修正する

## 環境
– Rails 5

## 前提
– テーブル名“trashes“を“trashes_objects“に変更すると仮定して進めます。

## 方法
### 1. マイグレーションファイルを作成
“`rails g migration change_[old_table_name]_to_[new_table_name]“`といった名前のマイグレーションファイルを作成します。

“`shell:terminal
$ rails g migration change_trashes_to_trash_objects
“`

### 2. マイグレーションの中身を書いていく

“`ruby:20191031040820_change_trashes_to_trash_objects.rb
class ChangeTrashesToTrashObjects < ActiveRecord::Migration[5.2] def change rename_tabl

元記事を表示

Rails で Date.today Date.current Date.tomorrow Date.yesterdat やらの日付が違うしずれるのだが? ( #Rails #ruby )

# 結論

– Date.today は Ruby のもの。ENV や システムのタイムゾーンを参照するらしい。
– Date.current Date.yesterday Date.tomorrow は Rails のもの。Railsのconfigを参照するらしい。
– RailsのメソッドとRubyのメソッドで扱うタイムゾーンが違う場合が出てくる。
– Railsで使うのは Date.today ではなく Date.current にしておくのが無難かも。

# Date.today

– Rubyのメソッド。
– ENV もしくはシステムのタイムゾーンを見るらしい。
– pryを起動して確認してみる。てきとうに日本時間とずれるタイムゾーンを指定してみる。

“`rb
[14] pry(main)> ENV[‘TZ’] = ‘Asia/Tokyo’
=> “Asia/Tokyo”
[15] pry(main)> Date.today
=> Thu, 31 Oct 2019
“`

“`rb
[12] pry(main)> ENV[‘TZ’] = ‘America/Phoeni

元記事を表示

Rails6 のちょい足しな新機能を試す102(ActiveRecord Type Casting編)

# はじめに

Rails 6 に追加された新機能を試す第102段。 今回は、 ActiveRecord Type Casting編です。
Rails 6 では、 データベースの connection adapter の Type Casting のバグが修正されました。

Ruby 2.6.5, Rails 6.0.0, Rails 5.2.3 で確認しました。
データベースは、 PostgreSQL 10.7 を使っています。

“`shell
$ rails –version
Rails 6.0.0
“`

今回は、ちょっと複雑で長くなります。

モデルが、 Author, Publisher, Book の3つがあります。
Author は、Book を複数持ちます。
Publisher は、 Book を複数持ちます。

Author の 一覧画面と詳細画面を作ります。
Author の 詳細画面には、 Author が書いた本の出版社の一覧も表示します。

# Rails プロジェクトを作る

“`
$ rails new rails_sandbox
cd rail

元記事を表示

ActiveSupport::Callbackを使うのをやめろ

タイトルは1年ちょっと前の自分に向けた自戒なので絶対に使うのが悪というわけではない(と思う)。
だがぼくにはうまい付き合い方が見つけられそうになかったのでやめろという強い口調を意図して使っている。

## ActiveSupport::Callback is 何?

これ→[activesupport/lib/active_support/callbacks.rb](https://api.rubyonrails.org/classes/ActiveSupport/Callbacks.html)

Railsガイドにも記載されているのでRailsチュートリアル完走するかそれ相当のことをしていたら使う使わないは別にして知っているだろうと思う。

[Active Record コールバック](https://railsguides.jp/active_record_callbacks.html)

“`ruby
# サンプルでよくみるやつ
class User < ApplicationRecord after_create :send_confirm_to_user priv

元記事を表示

OTHERカテゴリの最新記事