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

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

rails g migrate で外部キーを追加する

ポートフォリオ作成中に後から外部キーを追加しよとしたら、コマンドに詰まったので忘れないために記事にしておく。

articleテーブルにuser_idを追加する

“`
rails g migration AddUserRefToArticles user:references
“`

成功したら

“`
rake db:migrate
“`
を実行する。

元記事を表示

Herokuにデプロイしたら見た目が変になっちゃった問題

以前、Asset Pipeline に関する記事を書きました。Asset Pipeline をご存じない方はそちらを先に読んでいただけると、とっても理解しやすいのではないかと。

[Asset Pipeline を理解してみる](https://qiita.com/Furuta03/items/dfe84a839d2ea114a52c)

ともかく、超初心者の僕は初めて作ったtwitterクローンアプリを公開したくてサーバーにアップしたくなったのです。そしてどうやら**Heroku**というものが、初心者に優しい無料サーバーということで利用してみました!すると

僕「**アプリの見た目変わっとるやないかーい**」

調べた結果、その理由はAsset Pipeline にある様でした。問題の原因と解決法を書き残しておきます。

## 前提
####僕のスペック
– プログラミング学習を始めて1ヶ月
– HTML/CSS/Javascript/Ruby/Railsをprogateで一応学習済
– Ruby on rails でポートフォリオを作成中

####開発環境
– 端末 : LEN

元記事を表示

Asset Pipeline を理解してみる

Railsアプリの開発を行っていく中で、「Asset Pipeline」という言葉を目にするようになった。プログラミング学習歴1ヶ月の僕が「Asset Pipeline」を理解するまでの流れを記録することにした。

## 前提
####僕のスペック
– プログラミング学習を始めて1ヶ月
– HTML/CSS/Javascript/Ruby/Railsをprogateで一応学習済
– Ruby on rails でポートフォリオを作成中

####開発環境
– 端末 : LENOVO ideapad 530S-14ARR
– OS : Windows 10 Home ver.1809
– シェル : PowerShell 5.1.17763.771
– Ruby : 2.6.4
– rails : 5.2.4.1

##Asset Pipelineとは
以下引用です。(引用元:[Rails初学者がつまずきやすい「アセットパイプライン」](https://www.transnet.ne.jp/2016/02/28/rails%E5%88%9D%E5%AD%A6%E8%80%85%E3%8

元記事を表示

webpackerを高速化した話

webpackerの高速化をしようと色々試したら、灯台下暗しだったひとのお話。

### 環境
rails5.2.3
rails/webpacker v4.2.2
capistrano v3.x

# あらまし
デプロイがクッッッッッッソ遅い
デプロイ1回につきアセットのビルドに早くても200秒程度かかる。キレそう。
まあ待てないこともないけど結構辛い
とくにjs関係ないfixのデプロイに数分待たされるのはかなりしんどい

## 1) sourcemapをオフ
webpackのsourcemapを作ってる時間って割と長い。
自分の場合、200秒のデプロイ時間のうち、100秒くらいはsourcemapの作成に取られてた
高速化の手段としては有効だと思うけど、sourcemap消したくなかったので今回はパス
あとwebpackerでこの設定いじるのはなかなかめんどくさいので、webpackerマンは覚悟した方がいい

https://webpack.js.org/plugins/terser-webpack-plugin/

## 2) SplitChunksPluginでよしなに
web

元記事を表示

Rails modelのjoin戦略についての理解を深める1歩

こちらの記事。よく参考にしてます。
https://qiita.com/k0kubun/items/80c5a5494f53bb88dc58

ここで言っているキャッシュとは何か?
同記事の最後の表についてなんとなくふわっとした理解でした。
特にキャッシュする・しないについて。
それについてまとめました。

## Rails modelって
そのmodelに定義されたリレーションに則ってデータを取得できます

“`rb
class User < ApplicationRecord has_many :invoices ... ``` というUserモデルがあったとして ```rb user = User.first invoice = user.invoices ``` というふうに取得できますね その時、invoicesはどのタイミングで取得する(SQLが発行される)かというと ```rb user.invoices ``` としたタイミングです ## 結合してみよう 先程のmodelを使って結合してみよう ### joins ```rb user = User

元記事を表示

ログアウト、アカウント削除の実装 【初学者のReact×Railsアプリ開発 第13回】

#やったこと
* ログアウトとアカウント削除の実装
* ログアウトでは、ブラウザのLocalStorageに保存してあるtokenなどの情報を消去している。
* アカウント削除はRailsでdestroy。

#成果物
![pvd7u-2l44j.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367226/bccfba18-494a-873e-6287-88f5c1ca6f70.gif)

#実装手順(Rails)
###users_controller
* 消去するアカウントはログイン中のアカウントなので、current_userを使っている

“`ruby:users_controller.rb
def destroy
@user = current_api_v1_user
@user.destroy
render json: { status: ‘SUCCESS’, message: ‘Delete the user’, data: @

元記事を表示

GemのソースをTracePointを使って効率的に読む

Rubyには様々な便利なGemがあるので有効活用しない手はないですよね。
ただ使っているGemが予期せぬ挙動をした時やドキュメントに載ってないような詳細仕様を知りたい時などにソースを読みたくなることがあります。

Gemのソースを読みたい場合、GithubなどWeb上に公開されていることが多いのでブラウザでソースを見たり、ローカルにソースを落としてきて見たりすると思います。

ただ愚直にソースを読み始めるとソース量が膨大だったり、メタプロが多用されていたりなどで読解がかなり大変です。
そこでこの記事ではTracePointを使って効率的にソースを読む方法を紹介します。

# ソースを読んでみよう
具体例があった方が良いので、今回はrailsの`find_or_create_by`を使った場合に呼ばれるソースを探すことにしましょう。
https://github.com/rails/rails

今回はローカルマシンにチェックアウトして読むことにします。
この記事では6-0-stableブランチ(2020/01/14時点)を使っています。

## 愚直にやってみよう
該当箇所の探し方は人

元記事を表示

AWS EC2でCould not find pg-1.1.4 in any of the sources Run `bundle install` to install missing gems.と表示される

こんにちは[@yukifreeworld12](https://twitter.com/yukifreeworld12)です。
EC2でエラーが出て解決したのでメモとして、そして後世の同じエラーにハマった人の為にも…

#1. エラー文
EC2でGitと連携しクローンしていた終盤

“`
$ rake secret
Could not find pg-1.1.4 in any of the sources
Run `bundle install` to install missing gems.

$ gem install pg
Building native extensions. This could take a while…
ERROR: Error installing pg:
ERROR: Failed to build gem native extension.
<略>

To see why this extension failed to compile, please check the mkmf.log which can be found he

元記事を表示

Rails (with sorcery)+ React でOAuth認証を実装してみた

sorceryでRails +SPA構成のOauthサンプルがあまりなさそうなので
参考になれば。

## 環境
**backend**
– rails 6系

**front**
– react:16.12
– react-router: v5系

以下、sorceryのwikiに沿いつつ、SPA用でカスタムしたところを中心に記載
[sorcery wiki](https://github.com/Sorcery/sorcery/wiki/External)

今回はgithub と連携してみる

## 開発の概要

**Backend(Rails)**
– oauthからのcallbackを受け取り、ユーザー作成及びログイン処理

**Front(React)**
– githubAPIへQueryString形式でパラメーターをもたせてアクセス。
– 認証後callBackURLにリダイレクトし、Backendに取得したパラメーターを送信

### Backend側開発

#### external module関連のセットアップ

元記事を表示

検索画面の実装【初学者のReact✗Railsアプリ開発 第12回】

#やったこと
* 投稿の検索画面を作成し、検索結果を表示できるようにした。
* reduxを利用して検索結果を管理。(ページを移動して戻ってくるときに、前の検索結果を表示させるようにしたかった)
* ページネーションの実装にkaminariを使っている
* フォームの実装はredux-form

#成果物
![8gqb6-4o8vr.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367226/02efa3ae-3f51-9f30-6d64-c01cbe752891.gif)

#実装手順(Rails API)
###posts_controller
* 検索を行うコアとなる処理の記述を行っています。
* content LIKE?の使い方を初めて学びました。
* %をつけると、あいまい検索になる。無いと、完全一致。検索ワードはクエリでもらってる。
* ページネーションを使っているので、page_length(何ページまであるか)も返しています。
*
“`ruby:posts_controller

元記事を表示

【Rails】id以外の値を主キーに設定して、他のテーブルから参照する

##やりたいこと
・usersテーブルの主キーに`user_no`を設定(idというフィールドは使わない)
・billsテーブルに`customer_no`を設定する
・userモデルとbillモデルを1対多の関係で紐付ける

既存の(他の人が作った)システムと連動する必要があったので、、、

##実装
###user
“`app/model/user.rb
class Customer < ApplicationRecord has_many :bills ``` ```rb:usersテーブルのmigrationファイル class CreateUsers < ActiveRecord::Migration[5.2] def change create_table :users, primary_key: :user_no, autoincrement: false do |t| t.string :name t.string :email t.timestamps end end end ``` ###bill

元記事を表示

vagrant環境でも、rails s でRailsを動かしたい

# 環境
Ubuntu 16.04.5 LTS
Windows10
Vagrant

# 手順

Mac環境でRailsを動かすには、これでいいのだが、

“`cmd
rails s
“`

Vagrant環境では、このように、いちいちコマンドが面倒くさい。

“`cmd
rails s -b 192.168.33.10 -p 3000
“`

履歴から検索して、**!**してもいいのだが、もっと、サクッと動かしたい。

“`cmd
history | grep 33.10
“`

**.bashrc**を**vi**で開いて、**Shift + g**で一番下に移動。

“`cmd
vi ~/.bashrc
“`

下記の関数を追加する

“`script
function rails () {
if [[ “$@” =~ ^s$ ]]; then
command rails s -b 192.168.33.10 -p 3000
else
command rails “$@”
fi
}
“`

変更した、.bashrcを反映させます。

元記事を表示

Rails 初歩

![hair_long_manヒゲ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563190/9e5acc7b-a4ba-2894-909c-7b7738ebf79d.png)
       風邪ぎみザッキーさん

## Rails 学んでみて

### ターミナル実行を行うと、、
テキストの通り再現しているつもりでもlocalhost画面にエラーがよく出てしまいました。
それを正常にするのに手間取ってしまいました。

###   白い画面のエラー
  ?ターミナル側に問題がある

###   赤い画面のエラー
  ?VScode側に問題がある

###   (参考までに)自分が困ってしまった例db migrate
  カラムを作成せずに、そのまま実行を押してしまった場合
             ↓
  カラム作成のコードを書いてからそのまま再実行しても正常に戻らない。。。

###        解決策
  rails db:migrate:status = マイグレーションファイル

元記事を表示

railsでレコードに保存している「連続した改行」を改行を保持したままviewに表示する

#環境
Rails 5.2.3
Ruby 2.6.3

#実現したいこと
例えばArticleモデルのcontentカラムに保存している、
「あいうえお

かきこけこ」
をviewに表示したい。

#解決策
safe_join関数を利用し、改行文字をbrに変換する。
simple_format 関数もあるのだが連続改行が認識されないため、
safe_join関数を利用する。

“`haml:show.html.haml
= safe_join(@article.content.split(“\n”), tag(:br))
“`
#参照
https://api.rubyonrails.org/classes/ERB/Util.html#method-c-html_escape

元記事を表示

あっさり読むrails③(クラス)

#はじめに
[前回の記事](https://qiita.com/Moon1126Snow/items/d7e942bdb9dcc2cf4f55)にて、
`もちろんこのままだと味気ないので、実際にはclassを設定したり、他のメソッドを使用することになります`と書きました。
本記事では、その`classを設定する`の部分を実行しようと思います。
#実行
前回使用したコードを改良しようと思います。今の所、コードは下記の通りです。

“`haml
– @products.each do |product|
= product.name
= product.price
= image_tag(product.image)
“`

まずは、`name`,`price`,`image`をひとまとめにするクラスを作ります。

“`haml:index.html.haml
– @products.each do |product|
.product
= product.name
= product.price
= image_tag(product.ima

元記事を表示

Rails6 のちょい足しな新機能を試す 116(MySQL データベース存在チェック編)

# はじめに

Rails 6 に追加された新機能を試す第116段。 今回は、`MySQL データベース存在チェック` 編です。
Rails 6 では、MySQLのデータベースを存在するかどうかをチェックする方法が少し変わりました。
データベースが存在しないときに、 `bin/rails db:migrate` を実行した場合、 MySQLのエラーメッセージが英語以外でも、 `ActiveRecord::NoDatabaseError` が発生するようになりました。

Ruby 2.6.5, Rails 6.0.2.1, Rails 5.2.4.1 MySQL 8.0.16 で確認しました。 (Rails 6.0.0 でこの修正が入っています。)

“`shell
$ rails –version
Rails 6.0.2.1
“`

今回は、MySQL のエラーメッセージを ja_JP にして起動して、 `bin/rails db:migrate` コマンドを使って Rails 6.0.2.1 と Rails 5.2.4.1 の違いを確認してみます。

今回、MySQL のエラー

元記事を表示

deviseで認証メールのリンククリック時に認証しログイン画面に飛ばす

deviseで認証処理を実装時、confirmableのデフォルトだと、認証メールクリック時に`ActionController::UnknownFormat`エラーが出た。

`confirmations/show`のviewが無い。
認証成功時にログイン画面に飛ばしつつ、認証失敗時に`confirmations/show`をエラー画面として表示する。

versionは以下。

“`
ruby: 2.6.5
rails: 6.0.1
devise: 4.7.1
“`

### confirmations_controllerのshowメソッドをoverride
“`ruby:controllers/users/confirmations_controller.rb
class Users::ConfirmationsController < Devise::ConfirmationsController ... # GET /resource/confirmation?confirmation_token=abcdef def show self.res

元記事を表示

【Ruby on Rails】タイムゾーンの設定を日本時間に変更する方法

タイムゾーンの設定を日本時間に変更する方法です。

設定方法

`config`の中の`application.rb`内に下記のコードを追加。

“`ruby:config/application.rb

config.time_zone = ‘Tokyo’
config.active_record.default_timezone = :local
“`

これだけです。

元記事を表示

【Rails】開発環境で送信したメールを確認する

`letter_opener_web`という、ローカル開発環境で送信したメールを確認するgemがすごく便利だったのでまとめます。サーバーのログを辿らずに、ブラウザ上で良い感じにメールを見れます。

“`rb:Gemfile
group :development do
gem ‘letter_opener_web’
“`
“`terminal
$ bundle install
“`
“`config/environments/development.rb
# 以下2行を追加
config.action_mailer.default_url_options = { host: ‘localhost:3000’ }
config.action_mailer.delivery_method = :letter_opener_web
“`
“`config/routes.rb
# 以下3行を追加
if Rails.env.development?
mount LetterOpenerWeb::Engine, at: “/letter_opener”
end
“`
`loc

元記事を表示

超初心者が bundle exec を調べた結果

bundle user って何なんだ?
何かしらをインストールするときにこのコマンドを打っているけど、どういう意味なのかしら?
と思ったので、超初心者なりに調べて要約してみました。
この記事は以下の記事を参考にしています。
https://qiita.com/dawn_628/items/1821d4eef22b9f45eea8#bundler%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%9Fgem%E3%82%92%E7%A2%BA%E8%AA%8D

## 前提
####僕のスペック
– プログラミング学習を始めて1ヶ月
– HTML/CSS/Javascript/Ruby/Railsをprogateで一応学習済
– Ruby on rails でポートフォリオを作成中

####開発環境
– 端末 : LENOVO ideapad 530S-14ARR
– OS : Windows 10 Home ver.1809
– シェル : PowerShell 5.1.1776

元記事を表示

OTHERカテゴリの最新記事