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

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

Railsチュートリアル 第11章 アカウントの有効化 – アカウントを有効化する

# これから行っていくもの

* AccountActivationsコントローラーの`edit`アクションの実装
* 当該アクションに対するテストの実装
* AccountActivationsコントローラーに関係するリファクタリング
* AccountActivationsコントローラーからUserモデルにコードを移していく

# `authenticated?`メソッドの抽象化

## 前提

### アカウント有効化リンクにおける`params`ハッシュ

“`
http://www.example.com/account_activations/C477rjyLBojP4v5nfKcoqQ/edit?email=foo%40example.com
“`

例えば上述のようなURLで`AccountActivations#edit`アクションを呼び出した場合、アカウントの有効化に必要な属性は、`params`ハッシュを使って以下のように参照できます。

* 有効化トークンは、`params[:id]`として参照できる
* メールアドレスは、`params[:emai

元記事を表示

Railsチュートリアル 第11章 アカウントの有効化 – /users と /users/:id に対する統合テスト

# 何について書いているか

Railsチュートリアル第11章、[演習 – 有効化のテストとリファクタリング](https://railstutorial.jp/chapters/account_activation?version=5.1#sec-exercises_activation_test_and_refactoring)のうち、3番目の演習内容について書いています。

> ここまでの演習課題で変更したコードをテストするために、/users と /users/:id の両方に対する統合テストを作成してみましょう。

# 統合テストの作成

テストの名前は`users_activation`とします。

“`
# rails generate integration_test users_activation
Running via Spring preloader in process 14164
invoke test_unit
create test/integration/users_activation_test.rb
“`

#

元記事を表示

cronでコマンドがエラーなしで実行されない現象

# はじめに
railsでサーバ構築をしてて,wheneverを使ってcronでコマンドを実行させようとしていました.
しかし...
### >>>**何も出ない**<<< エラーすら出てくれないのです.ネットで「cron 実行されない」など検索してもイマイチ自分と同じ状況ではなさそうでした. # プロセスを確認しよう まずはこれを確認してください ```sh $ ps aux | grep cron ``` すると以下のような**"感じ"**の表示(**これは解決した後の表示なので一緒ではないです**)がされると思います.ここで,項目が3つくらいだったら良いのですが,もしかして2~30個あったりしませんか?それが私の場合のエラー(?)でした. ``` xryusex 27205 0.0 0.0 4270216 280 s001 S+ 2:48AM 0:00.00 tail -f /Users/xryusex/Desktop/cron.log root 26516 0.0 0.0 4288124

元記事を表示

Rails における JSON のシリアライズと向き合う ?

Rails で JSON を返す API サーバーを開発する際に、
選択肢となるシリアライズ方法をまとめてみました。
それぞれ Pros/Cons や好みがあると思います。
こういう選択肢があるんだよっていうのを提示できればいいかなーと思っています。
みんながどれを使ってるかアンケートとかも取ってみたい?‍?
(※記事の最後に載せました)

# スキーマ
サンプルとしてTwitterをモデルにする。
User と Tweet のテーブルを作成する。

“`rb
create_table :users do |t|
t.string :name, :null => false
t.string :screen_name, :null => false # @で始まるユーザー名
t.string :description # 自己紹介
t.integer :friends_count, :null => false # フォロー数
t.integer :followers_count, :null => false # フォロワー数
t.datetime :cre

元記事を表示

よく見るdeviseを日本語にするやつ

#やりたい事
deviseの日本語化を他の記事見ながらやってみる。

#手順
config/localesの中に、`devise.ja.yml`と`ja.yml`というファイルを。作り、gitに載っている記述をコピペする。以下↓

“`devise.ja.yml
ja:
errors:
messages:
not_found: “は見つかりませんでした”
# not_found: “not found”
already_confirmed: “は既に登録済みです”
# already_confirmed: “was already confirmed”
not_locked: “は凍結されていません”
# not_locked: “was not locked”

devise:
failure:
unauthenticated: ‘ログインしてください。’
# unauthenticated: ‘You need to sign in or sign up before

元記事を表示

[脳死チュートリアル]仮想環境の導入からRailsの環境構築まで[CentOS7]

#注意事項
`本稿通りに進めることで発生するあらゆる障害に対して一切の責任を負いかねますのでご注意ください`

#対象
– Railsの勉強のためにローカルでの環境構築がしたい方

#要求するスキル
– Windowsエクスプローラーを用いてファイルの操作ができる

#目標
**仮想環境上に以下のような開発環境を構築する**

#開発環境
– ホストOS: Windows10 home
– ゲストOS: CentOS 7.7-1908
– Ruby 2.6.5 (2019-12-08時点での安定版)
– Rails 6.0.1 (2019-12-08時点での最新版)
– Git 2.24.0 (2019-12-08時点での最新版)

#チュートリアルを始めるにあたって
`本チュートリアルでは基本的に必要なコマンドと最低限の説明で進めていくので、各コマンドに対する詳細な解説などは先駆者の方々の記事を参考にしてください`


# 1. 仮想環境の導入
## 1-1. CentOSのisoイメージを入手
[このリンク先](http://ftp.iij.ad.jp/pub/linux

元記事を表示

Rails+LazyHighChartsでチャートを描画する

(この記事は、[高専OBOG Advent Calendar 2019](https://adventar.org/calendars/4238)の12/10に送った記事です。)

# 要約

Ruby on Railsでは、[LazyHighCharts](https://github.com/michelson/lazy_high_charts)というgemを使うことで、簡単にきれいなチャートを描画することができます。
JavaScriptの知識がほとんどなくてもチャートの描画までたどり着くことができます。

流れはこんな感じです。

1. gemのインストール
1. controllerでやること
1. viewでやること
1. 動作確認

本家のREADME.md: https://github.com/michelson/lazy_high_charts/blob/master/README.md

# チャートの描画まで

## gemのインストール

LazyHighChartsが欲しいので、Gemfileに書きます。

“`ruby
gem ‘lazy_high_ch

元記事を表示

自動デプロイ(capistrano)中に遭遇したNameErrorの話

プログラミングスクールの課題でメル○カリのコピーアプリを制作しています。

その際Capistranoを使った自動デプロイに取り組んだのですが、どうにもエラーが止まらず難儀しました。

「どんなハイレベルな原因なのか」と悶えるも、冗談みたいに初歩的なミスだった話です。

# 作業環境

■Ruby 2.5.1

■Ruby on Rails 5.2.4

■本番環境
AWS(EC2)内に
webサーバー:nginx
アプリサーバー:Unicorn
データベース:MySQL
# 経緯

①「Rails new」コマンドでアプリを立ち上げる

②いったんCapistarnoの自動デプロイに成功。

③テーブルを用意するため「Rails g model」コマンドを実行。

生成されたのは以下のファイル

(1)モデルファイル

バリデーションとアソシエーションを記入。

(2)マイグレーションファイル

カラム名/データ型/not null制約

などなどを記入。

④「rails db:migrate」でテーブルを作成。

⑤ローカル環境で正常に動作する事を確認。

⑥自動デプロイのために

元記事を表示

HamlとSassの短縮方法

#はじめに
コードを書いていくうちに思いついた、Hamlコードを短くする方法の共有です。
正直当たり前な内容ではありますが、意外とこれが出来ることに気づきにくいのではないかと思い、投稿しました。
#実行
例えば次のようなHamlコードがあるとします。

“`haml
.header
ヘッダー
.body
.body__content1
.body__content1__red
一つ目のサンプル
.body__content1__blue
first sample
.body__content2
.body__content2__red
二つ目のサンプル
.body__content2__blue
second sample
.footter
フッター
“`

`body`の部分に`contents1`と`contents2`があり、
それぞれ子要素に`red`と`blue`の二つのクラスがあります。
`red`の方には日本語、`blue`の方には英語でテキストを入力しています。

このビ

元記事を表示

Rails リファクタリング まとめてみた

##書いてあること
– リファクタリングとは
– リファクタリングは何のため?
– ビューのリファクタリング
1.enum
2.enumの使い方

– コントローラーのリファクタリング
1.scopeを使って検索ロジックをモデルに移す
2.コントローラに書かれたロジックをモデルのメソッドで書き直す
– 参考ページ
– 終わりに

##リファクタリングとは
リファクタリングは処理の内容を変えずに冗長なコードを削除したり、コードを改善すること。
##リファクタリングは何のため?
– 読み手が最短時間でコードを理解できるようになる(チーム開発など、人と作業をするとき負担を減らす)
– 修正がしやすくなる(未来の自分への優しさ)

##ビューのリファクタリング
##1.enum
int型、boolean型で定義されたカラムを、文字列で表現できる

“`ruby:schema.rb
こんなテーブルができてます
create_table “tasks”, force: :cascade, options: “ENGINE=InnoDB DEFAULT CHARSET=utf8” do |t

元記事を表示

RSpec導入、記述ルール

#目的#
新しいポートフォリオを作成する際に、RSpecを利用したTDD(テスト駆動開発)
に挑戦するため、RSpec導入します。ついでにRSpecによるテストの簡単な記述ルールについて説明したいと思います。

#RSpecとは#
RSpec とは Ruby プログラマー向けのBDD(Behaviour-Driven Development) ツールです。
BDD(Behaviour-Driven Development)は、
できることは普通のテストと同じで、加えて、
これから作成しようとするプログラムに期待される「**振る舞い**」や「**制約条件**」、
つまり「**要求仕様**」に近い形で、**自然言語(英語)**を併記しながらテストコードを記述することができるものです。

**メリット**は、テストコードの可読性があがる上、テストコードが要求仕様となりうることと、
要求仕様からテストコードを起こす際も、スムーズにコードに移行しやすいことです。

#RSpecの導入#
まずは RSpec の Gem パッケージをインストールします。

“`Gemfile
・・・
group

元記事を表示

【Rails】Sassファイルから画像を指定する

Railsアプリを作成中、Sassファイルから背景画像でつまづいたのでメモ

##前提
sass-railsを使っている。(デフォルトで入っていた)
画像は`app/assets/images/`に保存。

##指定方法
`image-url(‘<ファイル名>‘)`で指定

“`app/assets/stylesheets/style.scss
h1 {
background-image: image-url(‘logo.jpg’)
}
“`

##その他
画像は`public/`に保存する方法もあるらしい。その場合の指定方法は知りません。
CSSで使うようなファイルは`app/assets/images/`に保存して、`public/`にはユーザーがアップロードした画像とかを保存する、といった使い分けが一般的なようです。

##参考
[Rails で背景に画像を表示したいのですが取り込み方を教えてください。](https://teratail.com/questions/106200)
[Railsで扱う画像はassetsとpublic、どちらに置くといいのでしょうか?](htt

元記事を表示

はじめてのRuby on Rails環境構築(Mac)(2019/12/09)

#はじめに
こんにちは。

ここでは、これまで主に、JavascriptやTypescriptでフロントを開発していたエンジニアが、ローカルのMacにRuby on Railsの開発環境を作ってみましたのでその手順をまとめてみました。

###エンジニアスペック(主な開発経験)
Java
Python
Javascript
Typescript
React
ReactNative
Next
Node
Vue
など。

#Homebrewのインストール
今回、購入直後の真新しいMacに環境構築を試みたので、まずはHomebrewのインストールから始めます。
https://brew.sh/index_ja

“`
$ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
“`

おっと、、エラーが出た。↓

“`
$ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.

元記事を表示

Rails6 数値入力時にtypeをnumberにしたのに数値として扱われず困った話

# 目的

– 勉強の実施時間を記録するwebアプリ作成の際に数値のinputで詰まり、コミュニティの方に助けていただいた話をまとめる
– そもそもセオリーを理解できていなかったので二度とこんなことない様にまとめる。
– `.to_i`を使って数値に変換できることはなんとなく知識としてあったが定着していなかったのでまとめる。

# 目標

– すでにDBに格納されている数値に入力数値を足してDBに格納する。
– 不動小数点や符号などはとりあえず考えず前述の目標をクリアする。

# 結論

– 教えていただいた現役エンジニアさんのお言葉「入力値はtype指定してもStringになってしまうので受け取った側で型を指定して変換する」

# 問題のコード

– 下記に問題のコードの一部を抜粋する。

– コントローラ

“`ruby
def update
@post = Post.find_by(id: params[:id])
@post.study_time = @post.study_time + params[:study_time]

元記事を表示

【Rails】エラーメッセージを使い回す

全てのフォームで、エラーメッセージを使いまわせるようにします。

関連:[【Rails】バリデーションを実装する](https://qiita.com/d0ne1s/items/822f66d16d65ae28162b)

##リファクタリング前
以下のような書き方だと、`@task`に対するエラーメッセージしか表示できないので、エラーメッセージ出力部分の記述をパーシャルに分けて使い回すことができません。

“`erb:view

新規タスク

<% if @task.errors.any? %>

    <% @task.errors.full_messages.each do |message| %>

  • <%= message %>
  • <% end %>

<% end %>
<%= form_for(@task) do |f| %>
.
.
“`

##リファクタリング後
フォームの中に`<%= rend

元記事を表示

Terraform + Ansible + Rails

# はじめに
Railsのアプリケーションを複数管理しているので今後の手間も考え、
何かテンプレ的なものが出来たらいいなと思って作成してみました。 :hammer:
今後の運用において改善点もまだまだあると思ってますのでご意見ご要望はどしどし頂けたらと思います。 :bow:

# 今回のゴール
Terraformで構築したEC2インスタンスにAnsibleを使ってRailsアプリケーションをデプロイするまでをゴールとします。 :golf:

# 事前準備
Docker, Terraform, aws-cli, Ansibleのインストールをお願いします。

“`bash
brew install docker
brew install terraform
brew install awscli
brew install ansible
“`

ちなみに私の環境は下記のようになっています。
macOS Mojave 10.14.6
Docker 18.09.2
Compose 1.23.2
Terraform 0.12.3
aws-cli 1.15.50
Ansible 2.6

元記事を表示

link_toメソッドの具体的な仕組み

Scaffoldでプロジェクトを作ると下記のようなリンクがindexなどに生成されるとおもうが、link_toメソッドの中に何があるのかいまいち理解せずに進めてしまっていた。

“`
<% @products.each do |product| %>

—-省略ーーー
<%= link_to 'Show', product %>
<%= link_to 'Edit', edit_admin_product_path(product) %>
<%= link_to 'Destroy', admin_product_path(product), method: :delete, data: { confirm: 'Are you sure?' } %>
“`
Showは表示される名前であることはわかると思います。

しかしproductってなんだ??

多分eachメソッドのproducなんだろうけどproduct単体でいるのがよくわからない。。。

**実はこれ省略されているんです!!**
[参考

元記事を表示

Devise を使って Active Directory から情報を取得する方法

## はじめに
この記事も [Qrunch](https://toyocy.qrunch.io/entries/kZzjqbiDPgLInAwc) で書いた記事ですが、技術的なフィードバックがもらえると嬉しいので、Qiita に再掲します。
なお、Qiita 版の前回の記事は[こちら](https://qiita.com/Tktyo/items/3afed3f7069ada5b79cc)です。

## ここから本文
前回はActive Directory(AD)に登録されたユーザーで、ログインできるところまで実装しました。
認証だけならこれでいいのですが、実際は AD に登録されている氏名やメールアドレスをとってきたりすると思います。
今回はそうした関連情報の取得をやってみたいと思います。

なお、今回のリポジトリは[こちらです](https://github.com/toyocy/ad_auth)

## 前提
今回は以下のユーザーを AD 上に作成して、AD に登録されている情報を取得したいと思います。

| 項目 | 設定値 | 属性名 |
|:-:|:-:|:-:|
|ユーザー

元記事を表示

Devise を使って Active Directory 認証を実装する

## はじめに
この記事は [Qrunch](https://toyocy.qrunch.io/entries/6NLmoQWASoJ5Sy1W) に投稿した記事です。
普段の業務でも AD 認証を使うことが多いのですが、きちんと Devise の使い方等がわかっていない部分があり、技術的なツッコミをいただけるとありがたいなーと思って、Qiita に再掲しました。

## ここから本文
社内の認証基盤で、Active Directory(AD) を使っている企業は多くありますが、業務システムの認証基盤として、 社内の AD を使用したいというニーズもあると思います。
今回は、Rails で業務システムを作ることを前提に、Devise を使用して AD 認証を実装してみます。

Ruby と Rails のバージョンは↓のとおりです。

“`sh
$ ruby -v
ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-linux]

$ bundle exec rails -v
Rails 5.2.3
“`

## Gemfile の編

元記事を表示

railsでのデータの保存、更新、削除の方法 Create,Update,Delete

# はじめに
今回はrailsでのデータの新規作成、更新、削除の方法をまとめていきます。

#データの新規保存 
newメソッド+saveメソッドかcreateメソッドでレコードを新規作成します。

#####newメソッド+saveメソッドの例

“`
#モデル名.new(カラム名: データ)+モデル名.saveのセットで保存されます。
#saveメソッド忘れに注意ください。これがないと保存されません。

#以下が例です。
post = Post.new(name: “記事1”, title: “hogehoge”)
post.save
“`

#####createメソッドの例

“`
#モデル名.create(カラム名: データ)で保存されます。
#createメソッドはnewとsaveメソッドを一度に実行できます。

#以下が例です。
Post.create(name: “記事1”, title: “hogehoge”)
“`

#データの更新
saveメソッドかupdateメソッドでレコードの更新を行います。
自身はupdateメソッドをよく使います。

###

元記事を表示

OTHERカテゴリの最新記事