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

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

Rails超絶初学者のためのデバッグ

# Railsでのデバッグ
Railsを学習しはじめて2ヶ月くらいですがデバッグで困った点やありがちな点とその対象法をまとめます。
デバッグとはバグを見つけて解決することです。
# よく起こるエラー
* Syntax error
* 書き方が間違っている時に起こるエラーです。
* よくある原因
* かっこを閉じていない
* 英語のスペルミス
* end を書いていない

* No method error
* そんなメソッドは存在しないというエラーです。
* よくある原因 (eachのやつ自分でもめっちゃありました。)
* 英語のスペルミス
* eachを使っている時にeachで回したい内容が一つの情報しか入っていない (複数情報が前提のため)
* argument error
* 引数の数が違うというエラーです。
* よくある原因
* 4つの引数を取り扱うメソッドで引数の数が5つ以上だったり、3つ以下だったり数があって

元記事を表示

rails consoleでLibrary not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib (LoadError)ってエラーが出る件について

まずエラー載せますね。
参考になるかもしれないのでエラーログまるごと。

“`sh
YourName@YourName application_name % bundle exec rails c
Traceback (most recent call last):
42: from bin/rails:4:in `


41: from /Users/YourName/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:325:in `require’
40: from /Users/YourName/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-6.0.2.1/lib/active_support/dependencies.rb:291:in `load_dependency’
39: from /Users/YourName/.rb

元記事を表示

Rails : turbolinksのせいでjQueryがリロードしないと動かない時の対処法

# turbolinksとは
ページ遷移をAjax(非同期通信)に置き換え処理を高速化するgemです。
(Rails4からはデフォルトで入っているとのこと)
# jQueryとは
JavaScriptライブラリの一種です。
アニメーションを作り出すものです。
# turbolinksのせいでjQueryに支障が出る場合の対処法
“`js:application.js

//= require rails-ujs
//= require activestorage
//= require turbolinks
//= require jquery
//= require bootstrap-sprockets
//= require_tree .

$(document).on(‘turbolinks:load’, function() {
//= この中にjQueryでの処理を書く
}

“`
このように記述するとページを更新しなくても動くようになりました。
他にも同じような記事がいくつかあるかと思いますがシンプルにまとめました。

元記事を表示

rails new APP_PATHで悩んだ

ほんとうに悩んだ。

“`
c:\workspace\rails new hoge
“`

これを実行してエラーもなく完了する。
しかし

“`
c:\workspace\cd hoge
c:\workspace\hoge\rails new hoge
Usage:
rails new APP_PATH [options]
(省略)
“`
ってなった。ググると仲間が多い。

エクスプローラーでhogeの中身が物足りないことに気が付いた!

コマンドプロンプトを管理者で実行してからやり直すだけだった。

元記事を表示

Rails コーティング規約について 4

# はじめに
Ruby、Railsの基礎を学習中の方に向けて記載致します。
[Rubyのコーティング規約はコチラをクリック願います。](https://qiita.com/raigakun/items/9db169935baa654af90d)
[Railsのコーティング規約 2 はコチラをクリック願います。]
(https://qiita.com/raigakun/items/265046a9fe78debfbd42)
私自身これからチーム開発を行う上で大事にしたい。知っておきたいことをOutputします。

#Routing
####ActiveRecordのモデル間の関連を表現するには、入れ子型でルートを定義すると分かりやすい。

“`qiita.rb
# 実践してみます。
class Post < ActiveRecord::Base has_many :comments end class Comments < ActiveRecord::Base belongs_to :post end # routes.rb resources :posts do re

元記事を表示

「The name ‘Todo’ is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.」エラー対処法

“`sh

$ rails g model Todo item:text
Running via Spring preloader in process 83975
invoke active_record
The name ‘Todo’ is either already used in your application or reserved by Ruby on Rails. Please choose an alternative and run this generator again.
“`

参考ページ
https://qiita.com/tu-kun/items/4fede82431e546abd941

原因:今回作ろうとしてるRailsアプリケーションのモジュール名とモデル名が重複していたためエラーになった

## 1.モジュール名の変更 Todo → RailsTodo

“`diff:config/application.rb
require_relative ‘boot’

require ‘rails/all’

# Require th

元記事を表示

Rails モデルについて

モデルとはRailsの中でデータベースへのアクセスをはじめとする情報のやりとりに関する処理を行います。

モデルの作成

以下のコマンドで作成できる。

“`!!!
$ rails g model モデル名

#postモデルを作成する場合
$ rails g model post
“`
成功すれば以下のような表示が出る

“`!!!
Running via Spring preloader in process 49331
invoke active_record
create db/migrate/20XXXXXXXXXXXX_create_posts.rb
create app/models/post.rb
invoke test_unit
create test/models/post_test.rb
create test/fixtures/posts.yml
“`
app/models/post.rbが作成したpostモデルになる。また、マイグレーショ

元記事を表示

Rails ビュー

ビューはレスポンスとして見た目を返すものになります。
コントローラーの次にビューが実行される。
app/views/コントローラー名ディレクトリにアクション名.html.erbというファイル名で作成される。
![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576859/3e589c14-af7d-14d0-a068-b4db9cf3c40c.png)

コントローラにインスタンス変数を定義

“`!!!
#app/controllers/posts_controller.rbに定義する場合

class PostsController < ApplicationController def index @post = "これはコントローラーで定義したインスタンス変数を確認するための文字列です" end end ``` ```!!! #ビューファイル(app/views/posts/index.html.erb)にインスタンス変数を定義

トップページ

元記事を表示

Rails コントローラーついて

ルーティングを設定したらコントローラーを設定します。
コントローラーはルーティングで振り分けられたリクエストを実際に処理する役割を持っています。
![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576859/20a7dde6-de6f-47a4-3f42-f626f39565e7.png)

コントローラーの作成

$ rails g controller コントローラー名

postsコントローラーを作成する場合

“`!!!
$ rails g controller posts

#app/controllers/posts_controller.rbが作成されているか確認
“`

コントローラー内にアクションを記載する

“`!!!
class PostsController < ApplicationController end #作ったばっかりでは何も記載はない ``` indexアクションを定義する場合↓ ```!!! class

元記事を表示

Rails ルーティング設定について

ルーティングとはどの要求を受けたら、どのコントローラを呼び出すかを決めている場所。
ルーティングの記載

【例】config/routes.rbに記載
以下はHTTPメソッドとリクエスト、そして行き先のコントローラーとアクションが明示されている形です。

HTTPメソッド

クライアントから送られたリクエスト(GET[ページを表示する操作]、POST[データを登録する操作]、PUT[データを変更する操作]、DELETE[データを削除する操作])のこと。

URIパターン

URLのようなもの。例えば、http://localhost:3000/posts
にアクセスする際はpostsのみを記載。

コントローラー

ルーティングの次にやってくる処理のこと。

アクション

コントローラー内における、処理のカテゴリの事。
ルーティングは「どのようなリクエスト」=>「どのようなコントローラー・アクション」をイメージ。

“`!!!
Rails.application.routes.draw do
[HTTPメソッド] ‘[

元記事を表示

Rails アプリ作成に向けての準備

実際にアプリケーションを作成するにあたっての説明です。

rails new コマンド

Railsで新規アプリケションを作成する際に使用します。

“`!!!
$ rails new アプリケーション名 -オプション名
# オプションを付けてアプリケーションを作成
“`

例:sample_appleを作成する場合

“`!!!
# Railsのバージョン5.2.3を用いて、「sample_apple」を「-d」オプションでMySQLを指定して作成。
$ rails _5.2.3_ new sample_apple -d mysql

# 「sample_apple」ディレクトリに移動
$ cd sample_apple

# 現在のディレクトリのパスを表示
$ pwd
“`

データベースを作成

![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576859/b0b138f3-b68c-c8ec-ce92-a256d844803f.png)

rails db:creat

元記事を表示

rubocopをbundlerでインストールするときにrequire: falseにする理由

## 本記事の対象者
「rubocopを導入するときにrequire: falseにしてたけど、理由がよく分からない」

そんな方に向けてこの記事を書いています。

## rubocopの導入方法
rubocopの公式ドキュメントでは、以下のコマンドを実行する

“`
$ gem install rubocop`
“`
もしくは、Gemfileに以下を記載して、bundlerで導入してくださいと書いてあります。

“`
$ gem ‘rubocop’, require: false`
“`
この記事では、後者について記載していきます。

## bundlerの特徴
rubocopを導入するうえで、覚えておきたいbundlerの特徴は、
「bundlerでは、Gemfileに書いたgemをまとめて自動でrequireする仕組みになっている」ということです。

## rubocopはどこで使うの?
rubocopは、ソースコードが規約に沿っているか確認するために、ターミナル等でコマンドを実行します。

## 結論
rubocopは、ターミナル等で使用するため、bundlerによって

元記事を表示

素人とEnumerizeとarray: true

## はじめに
 先日、Railsでチェックボックスを使った複数選択を実装した際に詰まったところがあったので書いておきます。

## やりたかったこと
– 好きな果物
– [ ] みかん
– [x] りんご
– [ ] ぶどう
– [x] バナナ

 選択肢の要素はEnumerizeで管理し、ビュー側では上のように複数選択でき、String型でDBに保存し、CSVで出力する際に”りんご, バナナ”という形式にする。

## 詰まったところ
 CSVに出力しようとするとnilが返ってきた。

## 解決法
 以下のようにマイグレーションファイルで`array: true`を追加する。

“`ruby
def change
add_column :users, :favorite_fruits, :string, array: true
end
“`

## 原因
 複数選択の際にEnumerizeは配列を返す(`#`)ので、`array: true`の指定によって配列を許容しておかないとDBに保存できなかっ

元記事を表示

[HowTo]Pay.jpを用いた商品購入機能実装から商品購入後の設定まで

某スクールのチーム開発にてpay.jpを活用したクレジットカード登録と商品購入機能実装を担当させていただくことになりました!
色々と苦戦しましたがなんとか実装できましたので、以下にまとめてみたいと思います。
今回は商品購入機能実装から商品購入後の設定までまとめております!
カスタムフォームを使用したクレジットカード登録については、以下の過去記事をご参照いただけますと幸いです。
https://qiita.com/Tatsu88/items/23fe4b83d0ff8d78709d

#実装内容
購入イメージ
Payjpのアカウント情報を取得して、商品の購入を行ってます。
![demo](https://gyazo.com/014c75443bb315699a300748bc50bcb9/raw)

購入後イメージ
購入後はその製品の写真にSoldとつけ、さらに購入ボタンを使用できないようにしています。
![demo](https://gyazo.com/28fcd40f586d1f0503ad5e6741f592c3/raw)

#全体の流れ
1. [購入]コントローラの編集
2.

元記事を表示

[Rails]『gemを使わない管理者機能』と『ActionMailerのメール送信機能で問い合わせ機能』を実装

##実装すること
①ユーザーは問い合わせフォームから問い合わせを送ることができる
②管理者はユーザーからのお問い合わせ一覧から問い合わせの確認ができる
③管理者が問い合わせ詳細から返信すると、ユーザーの登録しているメールアドレスに届く

##ActionMailerとは
ActionMailerを使うと、railsアプリケーションのメイラークラスやビューでメールを送信することができます。
(例)
・メールマガジンの一斉送信
・ウェブサイトに会員登録した時のthank youメール
・お問い合わせフォームの記入内容が管理者にメールでも送信される

参考:Railsガイド https://railsguides.jp/action_mailer_basics.html

##ER図
User:Contact = 1:N の関係になります。

問い合わせER図.pngdocker-compose run web rake db:createできないときにやったこと

# エラー文

“`
Starting myapp_db_1 … done
warning Integrity check: System parameters don’t match
error Integrity check failed
error Found 1 errors.

元記事を表示

[Rails]通知機能の実装

##実装すること
自分の投稿にいいねされた時・コメントをもらった時、フォローされた時に通知が来るようにします。

##完成イメージ
通知を未確認の状態では、ヘッダーのNOTICEにマークが付きます。
通知を確認すると、マークが消えます。
通知イメージ(マーク).png
ユーザーは自分への通知を見ることができます。
通知はまとめて全削除することができます。
通知一覧.png

##ER図
**Notificationテーブル**
item_id

元記事を表示

Railsチュートリアルの開発環境を Docker にしてみなイカ?

# 【概要】
Railsチュートリアルで作成する Sample App の開発環境を Docker でコンテナ化しました。

細かい用語の勉強はおいといて、とりあえず動くものを作ってみましょう。

– 開発環境
– macOS Mojave: 10.14.6
– Docker Engine: 19.03.5
– Docker Compose: 1.25.4
– コンテナ環境
– Alpine Linux: 3.11.3
– Ruby: 2.4.9 [^1]
– Rails: 5.1.2
– 参考: 学習情報 URL
– [Get Docker \| Docker Documentation | 公式](https://docs.docker.com/get-docker/)
– [Docker ドキュメント日本語化プロジェクト — Docker\-docs\-ja 17\.06\.Beta ドキュメント](http://docs.docker.jp/index.html)
– [Alpine Linux

元記事を表示

[Rails]ActionCableを使用してリアルタイムチャットの実装

##実装すること
ActionCableを使用して特定のユーザーとリアルタイムチャットをできるようにしていきます。

##完成イメージ

チャットイメージ図.png

##ActionCableとは
RailsにおいてWebsocketによる双方向通信を実現してくれているものです。
(Webにおいて双方向通信を低コストで行うための仕組み)
参考:Railsガイドhttps://railsguides.jp/action_cable_overview.html

##ER図
「EntryテーブルとDirectMessageテーブル」が「UserテーブルとRoomテーブル」の中間テーブルになっています。

チャットER図.png【Rails】ユーザーに紐づかない投稿によるエラーの解消法

## エラーが発生
下記のようなエラーが発生。
NoMethodError in Boards#index undefined method decorate
d8da0dfcf578fef98beaee1e1a10acf6.png
デコレータはすでに設定済みなのになぜ?となる。

## 原因
そもそもデコレータの原因ではなく、ユーザがnilだったのが原因だった。ユーザが存在しないので、名前を取りに行こうとしてもできないためこのようなエラーが発生した。

## 解決法
rails cでBoard.all.destroy_allを行い、ユーザが紐づかない投稿が消えた。その後新規作成を行うと、エラーが発生せずに、表示された。

元記事を表示

OTHERカテゴリの最新記事