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

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

CRUDとは

# CRUDとはなにか
**CRUD**とはデータベースの基本的な処理を表しています。
`create`、`read`、`update`、`delete`,それぞれの頭文字をとった造語になります。
それぞれの処理は以下のようになります。

| 言葉 | 意味 |
|:—————–|——————:|
| create | 新規に作成する |
| read | データを読み込む、選択する |
| update | 更新する |
| delete | 削除する |

webアプリに使われる多くのフレームワークに採用されています。
RailsもCRUDを使ったフレームワークの一つになります。

元記事を表示

collection_check_boxesの作り方

hamlを使ってransackとcollection_check_boxesを使った検索機能を実装しました。
その際属性付けなどに苦労したので記事にします。

“`ruby:complex-search.haml
= s.collection_check_boxes :status_in, @statuses, :first, :second do |b|
  .search-box-left
   = b.check_box
   = b.label { b.text }
“`
それぞれのコードを分解して説明

“`
= b.check_box
“`
= b.check_boxで以下のようなチェックボックスを画面上に表示
スクリーンショット 2019-12-13 10.52.25.pngストロングパラメーターとは

# ストロングパラメーターについて
フォームから値を送信したいのにDBに保存されない・・・
そんなときにみるポイントの一つが**ストロングパラメーター**です。

ストロングパラメーターとはざっくりいうとセキュリティーのことです。
まず、ビューのフォームで入力された値は`params`でコントローラーに送られます。
その際に許可していない不正の`params`を受け取らないようにするのがストロングパラメーターになります。
メリットとして、意図しないデータを受け取らないようにできることや、管理者のみ変更できるデータの変更を外部から変更されることを防ぐなどがあります。

以下、ストロングパラメーター例文

“`tweets_controller.rb
def tweet_params
params.require(:tweet).permit(:text,:image)
end
“`

今回は`tweets_params`というメソッドでストロングパラメーターを定義しています。
`require`の部分で何の値を受け取るのか、
`permit`は`require`で指定

元記事を表示

Rails5.2で色々やってみる

宮崎勉強会 Advent Calendar 15日目の記事です。勉強会の中では年上の方なので、「枯れた」技術の良さを再確認するという主旨で、私の好きなRubyとRails、そのオススメのgemを幾つか紹介します。(本当はRails6の新機能を紹介する記事を書くつもりでいたんですが、環境構築で手こずって路線変更しています。6を使いたいけど、まだ導入のハードルが高かった…)

今回使用するRailsのバージョンは5.2.4です。vagrant上に構築したUbuntuでコマンドを実行しています。

“`bash

$ rails -v
Rails 5.2.4
“`

まずは、新しいプロジェクトを作成します。今回は `wiki` という名前にしました。生成されたプロジェクトのディレクトリに入って、データベースの初期化とサーバの立ち上げもします。PostgreSQLを指定しているのは、このあとherokuというプラットフォームに載せてみようとしてるからです。

“`bash
rails new wiki –database=postgresql
cd wiki/
rails db:cre

元記事を表示

Unicorn導入後本番環境でRailsを起動してもアクセスできなかった時、tail -fコマンドが便利だった

## はじめに
グループ開発でデプロイ担当になった自分が、アプリケーションをAWSのEC2サーバにデプロイ中に発生した問題と解決できた方法についての話です。

##問題発生経緯
– AWSでEC2インスタンスの生成やポートは設定済み。
– ec2-userでログインしてRubyやRails、MySQLなどは一通り導入・設定済み。
– Railsを起動すべくUnicornをインストール。GitHubへのSSH鍵の設定を始め、個人課題でデプロイした時を参考にデプロイ作業を進める。
– 設定が終わってEC2サーバでRailsを起動。ブラウザに本番環境のURLを入れると以下のエラーが出た。

01エラー画面.png

##確認したこと
Unicornのエラーログを確認した。
less log/unicorn.stderr.

元記事を表示

Railsチュートリアル 第12章 パスワードの再設定 – PasswordResets#createで、メールアドレスが無効な場合の処理をテスト駆動で実装していく

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

「Railsチュートリアル 第12章 パスワードの再設定」の「[`create`アクションでパスワード再設定](https://railstutorial.jp/chapters/password_reset?version=5.1#sec-password_reset_create_action)」のうち、メールアドレスが無効な場合の実装を、テスト駆動で行っていこうという内容です[^なぜ]。

[^なぜ]: Railsチュートリアル本文においては、「先に実装を書いて、後から一気にテストを書いていく」という進め方をしています。しかしながら、個人的には、「テストを先に実装して、後から実装で追いかけていく」ほうが理解しやすいと思ったのです。

# メールアドレスが無効な場合の処理に対するテストの実装

Railsチュートリアル本文の通りに実装していくとすれば、以下のテストが「メールアドレスが無効な場合の処理に対するテスト」に該当することになります。

“`diff:test/integration/password_resets_test.rb
requ

元記事を表示

[Ruby on Rails5 アプリケーション プログラミング]学習ログ#2[2019/12/12]

<前回([#1](https://qiita.com/CAD-guest01/items/06892b36973fa1e35828))> <次回(#3)>

#目的
### Progateで学んだことをローカル環境で手を動かして復習することで、基礎を固める

#使用する教材
###山田祥寛(2017). RubyonRails5 アプリケーションプログラミング 株式会社技術評論社

#Q.「RubyonRails5 アプリケーションプログラミング」とは?
#A.ProgateのRoRコースを終えた後にするRoRの勉強としておすすめされている本

出典
(Samurai Blog / Ruby on Rails学習本おすすめ6選【入門者〜上級者までレベル別に解説】)[https://www.sejuku.net/blog/110292]


#今日やったこと
##Scaffolding機能によるRails開発の基礎(p64~p102)
[前回](https://qiita.com/CAD-guest01/items/06892b36973fa1e35828)とは異なり、コマン

元記事を表示

【CSS, Rails/Capybara】ラジオボタンのCSS実装で考えたこと(アクセシビリティ、UIテスト)

# はじめに
**ラジオボタンのデザイン** について、**CSSをカスタマイズして装飾**する際に勉強になったことの共有の記事です。

**(注意)** 記事の中で自動テストの話をしますが、それは**Ruby on Rails/Rspec/Capybara**を使った場合の話です。それ以外のテストフレームワークは動作を試していません。あらかじめご了承ください。

# tl.dr(Too Long, Don’t Read)
– `display: none;`より`opacity: 0;`を使った方が良い
– `display: none;`の場合、以下の2点が課題となる
– キーボードによるボタン操作ができなくなる(アクセシビリティの低下)
– Capybara(Railsのテストライブラリ)を使ったUIテストにおいて、`choose`メソッドでラジオボタンを選択できない

# よくあるラジオボタンのCSS装飾
ラジオボタンのデザインはデフォルトのCSSがあるため、上書きをすることが難しいです。そのため、よくあるラジオボタンのCSSの装飾は、以下のように元々のラジオボタンにあ

元記事を表示

アソシエーションの基礎 current_user

#ここでやりたいこと
1. **productを作った人とサイインしている人は常に同じ人物である**
– create アクションをするときにcurrent_idと紐づいたproductを保存したい
2. **ProductモデルとUserモデルとcurrent_userをわかりやすく紐付けたい。下記のコードをアソシエーションを用いて簡単にしたい。**

コメントアウトしているのは最初に僕が1のことをやろうとして試したこと。**この時は=をイコールとして考えていました。**

“`rb
def create
@product = Product.new(product_params)
#current_user.id = @product.user.id
respond_to do |format|
if @product.save
format.html { redirect_to @product, notice: ‘Product was successfully created.’ }
format.jso

元記事を表示

Docker && CircleCI && Herokuで最短で環境構築から自動デプロイまでやっていくっ

## やりたいこと
個人アプリを作る際に必ずと言っていいほど、毎回時間をかけるのはなんといっても環境構築。

開発環境作って、テストとrubocopを自動で回すようにして、
自動でデプロイされて欲しいのはきっとみんな同じ気持ち。

今回は、自分へのメモを含めて書き出しました。
ぜひ、皆さんのスターターキットとしてお使いください。

## この記事でできるようになること
* railsの環境構築
* CircleCIによるテストの自動化
* CircleCIによるRubocopの自動化
* Dockerを用いた環境構築
* CircleCIによる自動デプロイ

## 環境について
* Ruby 2.6.5
* Rails 6.0.2
* Docker for mac
* PostgreSQL
* Heroku
* CircleCI
* Rubocop

## 目次
0. 事前準備
1. Dockerの環境構築
2. CircleCIの環境構築
3. Herokuの環境構築
4. CircleCIとHerokuの連携

## 事前準備
### RailsApplication作成

元記事を表示

RailsにてerbファイルをHamlに変換する方法

備忘録としてerbファイルをHamlに変換する方法をまとめました。
手順は下記の通りです。

#**1.Gemfileにgem ‘haml-rails’を記述**

“`Gemfile
gem ‘haml-rails’
“`

#**2.bundle installをする**
記述後、bundle installをする

#**3.拡張子がerbのファイルをhamlに変換**
“`
$ rails haml:erb2haml
“`
コマンドを実行すると…

“`
——————————————————————————–
Generating HAML for app/views/home/top.html.erb…
Generating HAML for app/views/home/about.html.erb…
Generating HAML for app/views/layouts/application.html.erb…
Generating

元記事を表示

【Rails】Twitterのリストのメンバー全員を取得したい

#概要

Twitter廃人です。
2019-12-12、PCでのリスト閲覧が出来なくなっており、俺のツイッターライフが滅亡の危機に瀕しています。
スマホでは出来るけどなんで……。

Twitterくん頑張ってるけど、ふとしたことでリスト機能自体を消しちゃったりしそう……?
そうでなくてもアカウント永久凍結されたりしたら本気でヤバいなと思い、リストのメンバーを取得しておきたいと思います。

#環境
Ruby2.5.3
Rails5.2.1

#前提

TwitterAPI使えるようにするまでとかは他記事でお願いします。

gemで’twitter’を追加してbundle installするだけで良かった気がする。
他にもやった気もする。

忘れました

#Model

“`ruby:app/model/tweet.rb

class Tweet < ApplicationRecord # --- Twitter API --- # APIに接続するためのクライアント生成 def self.get_client client = Twitter::REST

元記事を表示

Railsチュートリアル 第12章 演習 – form_forメソッドで、@password_resetではなく:password_resetを使っている理由

# ユーザー登録フォームの`form_for`メソッドを`:user`で構成した場合に出力されるHTML

仮に、ユーザー登録フォーム(`app/views/users/new.html.erb`)を以下のような埋め込みRubyで構成したとします。第1引数が`:user`であることがポイントです。

“`erb:
<%= form_for(:user, url: yield(:path)) do |f| %>
“`

出力されるHTMLは以下のようになります。

“`html:


“`

# ユーザー登録フォームの`form_for`メソッドを`@user`で構成した場合に出力されるHTML

一方で、ユーザー登録フォーム(`app/views/users/new.html.erb`)を以下のような埋め込みRubyで構成した場合はどうなるでしょうか。第1引数が`@user`であることがポイントです。

“`erb:

元記事を表示

Docker + Rails 環境にSystem Specを導入する

いろいろ調査しながら対応したのでまとめておきます :pencil:

## 環境
rails (6.0.1)
rspec-rails (3.8.2)
capybara (3.29.0)
docker 2.1.0.5 (40693)

## 手順

### gemのインストール
まずはSystem Specに必要なgemをインストールします。

“`rb:Gemfile
group :test do
gem ‘capybara’
gem ‘selenium-webdriver’
end
“`

もちろん、Rails環境がDockerで動いている場合はコンテナ内で実行する必要があります。

“`sh
# サービス名がappの場合
$ docker-compose run –rm app bundle install
“`

### Docker用スクリプト作成
System Specに必要なchromeをどう用意するかですが、

1. chromeをrails環境と一緒のイメージでbuildする
2. chrome用コンテナをdocker-composeに追加する
3

元記事を表示

link_to (Haml)タグにクラス名をつける

syntax error, unexpected keyword_ensure, expecting end-of-input

Haml in Rails:画像をリンクにするときのエラー:

間違えたコード:

“`
= link_to %a{:href => “file:///Users/HOkaniwa/Desktop/IBplat%202/Questions%23index_home.html”}
  = image_tag “logo2.png”
“`
エラー:SyntaxError in QuestionsController#index

直したコード:

%li= link_to image_tag(‘logo2.png’, id:”logo”), questions_path
画像を使わない他の例:

%li= link_to ‘質問する’, questions_path, class: “a btn btn-default”
直すこと
1:パス名を確認して直す。

(NameError in Questions#indexを直す) http:

元記事を表示

フォームに関する基礎知識をつける Ruby on Rails

## 新規作成フォームと更新フォーム中身は同じ?でも何かが違う!

**中身 = 入力欄が記載されている_form.html.erbなどのことです**
**違い = action 属性**

下記のような_form.htmlはnewとedit両方に使用されます。(中身は同じ)

“`rb

<%= form.label :name, "ユーザー名"%> <%= form.text_field :name %>
<%= form.label :birthday, "誕生日", for: "member_birthday_li"%> <%= form.date_select :birthday, start_year: 1970, end_year: Time.current.year,

プログラミング初心者がWeb開発を行えるようになるための5ステップ

みなさんこんにちは、[@y_temp4](https://twitter.com/y_temp4)です。

自分は普段フリーランスのエンジニアとして働いており、そのかたわら[TechTrain](https://techbowl.co.jp/techtrain/)でメンターもしています。

メンターの経験を通してメンティーから感じることは様々ですが、多くの初心者はどのように学習を進めていけばよいか悩んでいるケースが多いように思います。

そこで今回は「**Web 開発を学ぶ上での初期の学習の進め方**」について、自分なりのアプローチを書いてみようと思います。

前提として、以下のような方を想定読者としています。

– プログラミング未経験・軽く嗜んだ程度
– Web アプリ・サービスを作りたい
– やる気がある(← 重要)

では、さっそく本題に入ります!

## ステップ 0: MacBook を買う

いきなりですが、Web 開発を行う上では**Mac**を使うのが望ましいです。自分の経験上、多くの方が Mac で開発を行っていますし、Mac でなかったとしても Linux を使っ

【個人メモ】ローカルにインストールされていないRailsのバージョンのインストール方法

#現象

“`
rails _5.2.3_ new kenban
“`
でイントールしようとした所、下記のエラーが出た。

“`
$ rails _5.2.3_ new kenban
Traceback (most recent call last):
4: from /home/ec2-user/.rvm/gems/ruby-2.6.3/bin/ruby_executable_hooks:24:in `


3: from /home/ec2-user/.rvm/gems/ruby-2.6.3/bin/ruby_executable_hooks:24:in `eval’
2: from /home/ec2-user/.rvm/gems/ruby-2.6.3/bin/rails:23:in `
‘ 1: from /home/ec2-user/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/rubygems.rb:303:in `activate_bi

【Rails】Rails g devise 〇〇でin `block in load_missing_constant’: uninitialized constant User (NameError)が出てきた時の対処法

#現象
Userモデルを作成するため、

“`
rails g devise User
“`
上記コマンドを入力。
ところが

“`
/Users/hogehoge/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/active_support.rb:79:in `block in load_missing_constant’: uninitialized constant User (NameError)
“`
というエラーが出てきた。

# 原因
すでに下記のようにroutes.rbにdevise_for :usersというコードを入れており、ルーティングおかしくなってrailsコマンドがうまくいかなかった。

“`config/routes.rb
Rails.application.routes.draw do
devise_for :users
root ‘top#index’
end
“`

#解決策
con

【Ruby】merge, merge!

#mergeメソッドについて
2つのハッシュを統合するレシーバhashと引数other_hashのキーと値を集め、新しいハッシュに入れて返す。重複するキーが有るときは、ohter_hashの値が使われます。

“`
image1 = { :src => “monkey.jpg”, :alt => “monkey” }
image2 = { :width => 320, :height => 240 }
image3 = image1.merge(image2)
puts image3[:src], image3[:width]
“`

“`
monkey.jpg
320
“`

### 使い方
“`
hash.merge(other_hash) {|key, oldval, newval| block }