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

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

rails検索機能追加

#はじめに
今回は投稿されたマイクロポストを入力された文字からあいまい検索する機能を追加します。

###作るもの
railsのform_withヘルパーを利用した投稿の検索機能。(題材は自分のポートフォリオ)

###対象読者
railsチュートリアル終了後等に何か機能を追加したい人等。

#作成の流れ
1.対応するビューの作成
2.コントローラーの編集

#1.対応するビューの作成
今回は検索フォームをroot_path上に設けます。(自分のポートフォリオがマイクロポストの一覧をroot_path(static_pages/home)に設けているため)

“`ruby:app/views/static_pages/home.html.erb
<%= form_with( url: root_path, class: 'search_form', method: :get, local:true) do |f| %>
<%= f.text_field :search,class: 'field',value: params[:search]\ placeholder: "ス

元記事を表示

ツイッター風Railsアプリ最短復習(忙しい人の流し読みで開発シリーズ)

# はじめに
こんにch… え?忙しい?? んじゃぁスタート!!!

# 具体的な手順
[完成品GitHub](https://github.com/annaPanda8170/cheaptweet)
## ①アプリ立ち上げ
“`bash:Terminal
$ cd Desktop
$ rails _5.2.4.1_ new cheaptweet -d mysql
$ cd cheaptweet
$ rails db:create
$ rails s
“`

“`:webBrowser
localhost:3000
“`
rails.png

## ②テーブル作成
![cheaptweet.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws

元記事を表示

RspecでProcess.fork内のメソッドを検証したい

# fork内のメソッドコールを単純に検証するとうまくいかない

こんなクラスがあるときに

“`ruby
class Dog
def crow(str)
p str
end

def walk
Process.fork do
crow(‘bowbow!’)
end
end
end
“`

walkメソッド内でcrowメソッドが呼び出されていることを検証しようとしてこんなspecを書いてみるとうまく通りません

“`ruby
let(:dog) { Dog.new }

it {
expect(dog).to receive(:crow).with(‘bowbow!’).once
dog.walk
}
“`

“`bash
Failures:

1) Dog is expected to receive crow(“bowbow!”) 1 time
Failure/Error: expect(dog).to receive(:crow).with(‘bowbow!’).once

元記事を表示

[payjp]tokenは発行できているのに呼び出せるはずのデータがテーブルに入らないエラーの解決方法

#1.どのような状態だったか

javascriptで`payjp-token`取得はコンソールで確認すると全て成功しており、ページ遷移の部分でもエラーは出ず、validationに関するエラーも出ないのに、コントローラーで`payjp-token`の値が取り出せないという状態でした。(エラー文が出ず、正常にnewアクションに戻るという症状でした。)

下記の二つの記事を参考にpay.jp機能を実装をしていました。(大元が上の方で、それの詳細まで記述されていたのが下記の方でした。)

https://qiita.com/takachan_coding/items/f7e70794b9ca03b559dd
https://qiita.com/emincoring/items/ce29dbbd182aa3c49c6b

なのでとりあえず動作を見るべく細部まで記述のあった下記のブログを参考に下記のようにviewを作成しました

※今回はviewの記述によるエラーだったので、その部分についてのみ記述します

“`haml:app/view/cards/new.html.haml
.cont

元記事を表示

【rails】partialをサクっと実装してちょっと覚える

partialは部分テンプレートを使用して、同じパターンの塊を複数生成するのに便利なものです。
eachでもできますが、処理速度がpartialの方が早いらしいですよ。

そんなpartialですが、理解するのに苦戦した記憶があります。
partialを知らなかった頃の自分に読ませたい記事をかけたらなと思います。

**使うもの**
・Ruby on Rails
・mysql
・haml

“$ rails s“でハローワールドを表示できる環境を整えてください。

#作れるもの
![d6941f061beebf513046f5abd5ff8a48.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480700/488a166e-b3f5-3b35-1f29-aba0b7fdf869.gif)
こんな感じのものをpartialで実装します。

# [1]controllerを生成する
Tシャツの画像リンクを表示させるプチ実装をして覚えましょうという記事です。
まずはcontrollerを生成します。
`

元記事を表示

非同期通信

##非同期通信(Ajax)
画面をリロードしなくても情報が反映されるWebアプリケーションの機能です。例えばTwitterだと更新しなくても情報がされますね。
非同期通信はAjax(エイジャックス)と呼ばれます。
Ajaxでは、レスポンスのデータにJSONという形式が使われることが多いです。
##JSON
データ交換を行うためのデータ記述形式の一種です。Rubyのハッシュと同様、キーとバリューの組み合わせでデータを表現する形式です。
【例】

“`
{user_name: “testさん”, created_at: “2020-03-17T10:35:13.000+09:00”, content: “これがJSONの形です”, image_url: null, id: 5}
“`
## 非同期通信ではJavaScriptを利用
同期通信では、フォームのinputタイプがsubmitであるボタンを押すことでリクエストを行うことができました。ボタンを押すとリクエストが送られるという挙動は、HTMLであらかじめ定められているものです。
##デフォルトアクション
HTMLの要素を操作した際

元記事を表示

[Heroku]デプロイ失敗から得られた2つの知見[備忘録]

# tl;dr
###1. herokuではmigration fileは日付順にmigrateされるため、外部キーを設定したmigration fileがある場合は、migrateの順番を考慮する。

###2. heroku logsより詳細な情報が欲しいなら`heroku run rails c`を使う


#環境
ruby 2.6.5
rails 5.1.6.2
heroku/7.39.0 linux-x64 node-v12.13.0


#問題1
`heroku run rails db:migrate`を行うと以下のようなエラーが発生した

“`console:
PG::UndefinedTable: ERROR: relation “test_types” does not exist
: CREATE TABLE “param_values” (“id” bigserial primary key, “name” character varying, “test_type_id” bigint, “created_at” timestamp NOT

元記事を表示

[Rails]hamlでのform_with/form_for/form_tagの書き方

#はじめに
hamlでのformの書き方がまとまっていなかったのでまとめる

※`form_tag`と`form_for`は`Rails5.1`で非推奨となっており、将来的に`form_with`に置き換えられる予定です。
極力、`Rails5.1以上`と`form_with`の使用を推奨します。

#Railsのformの種類
###1. form_tag
– 関連するモデルがない時に使用する(検索機能など)
– inputタグを用いる(ビルドヘルパーを用いない)

“`ruby
<%= form_tag users_path do %>
<%= text_field_tag :email %>
<%= submit_tag %>
<% end %>
“`

###2. form_for
– 関連するモデルがある時に使用する(投稿機能など)
– ビルドヘルパー(`form.xxxx`)を用いる

“`ruby
<%= form_for @user do |form| %>
<%= form.text_field :email %>
<%= form.submit

元記事を表示

アプリ作成 アウトプット

# ツイート機能実装アプリ開発
本日
1スケジュール作成していく中で何が実装に必要なのか、整理することが出来た。
2新規アプリの立ち上げrails new など 必要な作業が、何も見ずに作成していくのは難しい。

本日はここまで、データバースの設計等調べながら進めていく。

元記事を表示

Rspecでネスト有りのルーティングパスにvisitコマンドでアクセスする for Ruby on Rails

# ネスト有りのルーティングでテストしようとした
specファイルを書いていたとき、ネスト有りのルーティングのテストでvisitコマンドのパスはどう書くんだと?疑問に思いました。
viewファイルと同じ感じでいけるのか?いう疑問で、試してみるといけました。

# routes.rbの設定
`routes.rb` ではこのような設定があるとします。

“`ruby:routes.rb
resources :categories do
resources :products
end
“`

`rails routes` とすると、こんな感じになります。

“`console:結果ログ
category_products GET /categories/:category_id/products(.:format) products#index
POST /categories/:category_id/products(.:format) products#creat

元記事を表示

【ruby】Docker開発環境へのGoogle Cloud Translation API (v2)導入手順

# 開発環境
ruby ‘2.6.3’
rails ‘6.0.2’

# Google Cloud Translation APIとは

* ウェブサイトやアプリを 100 以上の言語に瞬時に翻訳したい場合などに役立つのが Translation API です。
*
# Translation API の料金

* [Translation API の料金](https://cloud.google.com/translate/pricing?hl=ja)
* [Google Cloud の無料枠](https://cloud.google.com/free/docs/gcp-free-tier?hl=ja)
私の場合は`12 か月間の無料トライアル(Google Cloud サービスで使用できる $300 相当のクレジット付き)。`なので無料です。

# 導入手順

* [GCP公式サイト](https://cloud.google.com/)
* [導入参考サイト](https://www.apps-gcp.com/gcp-startup/)
最初にプロジェクトが作成されます、そ

元記事を表示

Ruby on RailsでWebAPIの作成

# Ruby on RailsでWebAPIの作成

## はじめに
この記事では、Ruby on RailsにおけるAPIの作り方を簡単に紹介します。
データベースへのユーザ登録、参照、消去、更新ができるAPIを作成し、いじりながら解説します。

### 前提知識
– API
– JSON
– HTTPリクエスト、レスポンス
– GET, POST, DELETE, etc

### 環境
– ruby 2.6.5
– Rails 6.0.2

## 作り方
なにはともあれAPIの基盤の作成。

“`
[tmp]$ rails new RailsApi –api
“`
ご存知`rails new [アプリ名]`とすることでアプリの基盤を作成することができるが、 **–api**のオプションをつけることでAPIに必要なものだけに絞って作ってくれる。

“`
[tmp]$ cd RailsApi
“`
RailsApiフォルダに移動。

“`
[RailsApi]$ rails g scaffold user user_id:string password:string

元記事を表示

Rails アプリにGoogleMap APIを導入する

### はじめに
投稿画面で、ユーザから入力された地名を、GoogleMap上に反映させるための機能実装をまとめます。

### 実装方法

#### 1.ライブラリをインストール。
以下のライブラリをGemfileに追記します。

“`php:Gemfile
gem ‘gmaps4rails’
gem ‘geocoder’
“`

そして、installします。

“`php:terminal
$ bundle install
“`

#### 2.カラムの追加

次に、すでに存在しているpostsテーブルにカラムを追加していきます。

“`php:20200223012643_add_address_to_posts.rb
class AddAddressToPosts < ActiveRecord::Migration[5.2] def change add_column :posts, :address, :string add_column :posts, :latitude, :float add_column :posts, :l

元記事を表示

Railsのバージョンを5から6にしたらBlocked Hostというエラーが出てきてびっくりした話

開発中のサービスのRailsのバージョンを5から6に上げたのですが、`Blocked host`というエラーが出るようになりこれまで使えていたユーザーの招待機能が使えなくなる事象に遭遇しました。

Rails 6から導入された新しいセキュリティー対策のようです。
解決策としてエラー画面に表示されている通りconfigファイルに許可するホストを追加しました。

“`
development.rb or production.rb
config.hosts << "app.survelion.com" ``` バージョンアップの際は気をつけましょう。 参照記事: https://www.tmp1024.com/articles/solve-blocked-host-of-rails

元記事を表示

Rails6でActiveJobのQueueAdapterがTestAdapterに上書きされてしまい非同期で実行されてしまう

Rails6の不具合で`RAILS_ENV=test`の場合、Railsの`config.active_job.queue_adapter`の設定に関わらずActiveJobが非同期で実行されてしまう不具合が発生しています。これは現在(2020/2/28)の`6-0-stable`でも修正されていません。

今回はrspec-rails & sidekiqを利用しているという前提で書きます。

# 原因
Rails側のバグです。active_job/railtie.rb を6-0-stableと5-2-stableで比較してみると、
active_job.set_configs initializerにコードが追加されています。

https://github.com/rails/rails/blob/5-2-stable/activejob/lib/active_job/railtie.rb
https://github.com/rails/rails/blob/6-0-stable/activejob/lib/active_job/railtie.rb

“`ruby:activ

元記事を表示

Dockerを使った既存のRailsアプリの環境構築に苦労したので、メモを残してみた

#1.はじめに
 2020年3月からDockerの勉強を始め、基礎を終えた後、Railsの環境構築に挑戦してみようと思ったが、思いの外、上手くいかなかったので、ここにメモを残すことにしました。誰かの参考になれば幸いです。
#2.教材
・[入門 Docker](https://y-ohgi.com/introduction-docker/)
・Docker/Kubernetes 実践コンテナ開発入門(書籍)
・Docker Hubの公式イメージ
#3.開発環境
・[Play with Docker](https://labs.play-with-docker.com/)
(事前にDockerHubのアカウントが必要です。)
・Ruby:2.5.3
・Ruby on rails:5.2.2
・MySQL
#4.手順
###4-1 クローンを取得
まずは、GitHubからgit cloneでアプリをクローンしておいてください。

“`
git clone ‘クローンしたいアプリのURL(GitHub参照)’
“`

これで、作成済みのアプリをローカルディレクトリに取り込むことができました

元記事を表示

Rails + GitHub の導入

## 概要
Ruby on Rails 作成したアプリケーションを GitHub に登録して管理するまでの流れになります。

## 目次
1. Rails アプリケーションのローカルリポジトリを作成
2. GitHub にリモートリポジトリを作成
3. ローカルリポジトリとリモートリポジトリを結びつける
4. ローカルリポジトリをリモートリポジトリに反映

## 1. Rails アプリケーションのローカルリポジトリを作成
ターミナルで rails new コマンドを実行し、ローカルレポジトリを作成します。

“`rails:ターミナル
$ rails __ new <アプリの名前> -d <データベースの種類>

# (例)
# $ rails _5.2.3_ new test-github -d mysql
# “5.2.3”バージョンで、データベースに “mysql” を使用し、”test-github” という名前のアプリを作成する。
“`
## 2. GitHub にリモートリポジトリを作成
GitHub で「+」メニューから「 New rep

元記事を表示

画像アップロードとリサイズ

##Carrierwaveとminimagick
画像アップロードするにはCarrierwaveを使います。
画像ファイルをリサイズするにはminimagickを使います。
ターミナル

“`
$ brew install imagemagick
“`
Gemfileの一番下に

“`
〜省略〜
gem ‘carrierwave’
gem ‘mini_magick’
“`
ターミナル

“`
$ bundle install
“`
ターミナル

“`
$ rails g uploader image
“`
【例】モデル名をMessageとします

“`app/models/message.rb
class Message < ApplicationRecord 〜省略〜 mount_uploader :image, ImageUploader end ``` ```app/uploaders/image_uploader.rb class ImageUploader < CarrierWave::Uploader::Base # I

元記事を表示

一時フォルダ内だからといってファイルを閉じ忘れてはいけない

# 結論

一時フォルダを消してもそのファイルが完全に消えずハードディスクを圧迫して困ります、ちゃんと閉じましょう

# 紹介: 一時フォルダ

Rubyでは簡単に一時フォルダが作れてブロックが終わるとフォルダが消えてくれるので作業フォルダとして扱いやすいです

“`ruby
Dir.mktmpdir(‘test’) do |dir|
# ファイル作ったり開いたり
end
“`

# 失敗: ファイルを開く(閉じない)

どうせ一時フォルダで消えるのだからと Open して使うだけで閉じるのを忘れていると….

“`ruby
Dir.mktmpdir(‘test’) do |dir|
# ファイル生成処理
f = File.open(path)
# 作業
end
“`

# 問題: ファイルが消えない

tmp フォルダは空っぽなのにハードディスクがどんどん圧迫されていく…
そう Linux だとプロセスが残る限り完全に消えていないのです
Rails server や Delayed Job Woker の再起動などを行い問題の処理のあるプロセスごと一旦

元記事を表示

エラーメッセージ

##errorsメソッド
【例】app/views/groups/の中に_form.html.hamlファイルを作成したとします

“`app/views/groups/_form.html.haml
= form_for group do |f|
– if group.errors.any?
.chat-group-form__errors
%h2= “#{group.errors.full_messages.count}件のエラーが発生しました。”
%ul
– group.errors.full_messages.each do |message|
%li= message
〜省略〜
“`
group.saveのように変数groupの保存をしようとした時に、失敗するとgroupにエラーメッセージが格納されます。
その変数に対してerrorメソッドを使用するとエラーメッセージの取得ができます。
any?メソッドによって、エラーメッセージの有無を判定しています。
fu

元記事を表示

OTHERカテゴリの最新記事