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

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

シンプルでやさしいチートシート 【Rails Migration編】

## はじめに
毎回ググってる気がするので、まとめました。
右側の目次からお探しの用語やコマンドをクリックしてお使いください:slight_smile:

## 対象となる読者
* マイグレーションに苦手意識のある初心者の方
* 復習も兼ねて基本操作を中心におさらいしたい経験者の方
* マイグレーション関連でハマりたくない方

###テーブルを作る
modelを作成すると/db/migrate/ 以下にマイグレーションファイルも一緒に作成されます。
この場合クラス名は`User`、`name`,`email`という属性にデータタイプ(型)として`string`を指定しています。

“`ruby

$ rails g model User name:string email:string
invoke active_record
create db/migrate/20200130031151_create_users.rb ← マイグレーションファイル
create app/models/user.rb
invoke test_unit

元記事を表示

【Rails】I18nの定義存在チェック

# 指定したkeyがI18n定義済みか確認したい

`I18n.exists?(#{key})` で確認できます。

“`yml:config/locales/ja.yml
ja:
users:
index:
title: ユーザ一覧
“`

“`ruby:
I18n.exists?(‘users.index.title’)
=> true # 定義済みなので true

I18n.exists?(‘users.show.title’)
=> false # そんな定義は無いので false
“`

元記事を表示

Ruby_on_Rails 複数画像投稿(10個のinputとプレビュー)new edit(新規、編集、削除)

## あなた、複数画像で困っていませんか?

noteで有料化しようと考えていましたが、他国のエンジニアのレベルが鬼高いということで公開したいと思います。

いいね!とフォローだけしてください

完全にオリジナルですが、考え方はあっているはず。

## 出品画面のHTML

“`haml:new.html.haml
.new-product
=render “./registrations/sub-header”
.main
.head
%h2 商品の情報を入力
= form_with model: @product, class: “form”, id: “product-form” do |f|
.form-image
.form-image__title
%label 出品画像
%span 必須
.form-image__text 最大10枚までアップロードできます
= f.fields_for :images

元記事を表示

Ruby 2.7 とRails 6.0.2.1でrailsコマンドをたたくとすごいwarningがでる

Ruby2.7とRails6.0.2.1とpostgres12.1でDBを作るために以下のコマンドをたたくとすごいwarningがでた(処理は完了している)のでwaringを表示しないようにしてみる。

“`console
$ bundle exec rails db:create
/.rbenv/gems/2.7.0/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:37: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
/.rbenv/gems/2.7.0/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/static.rb:110: warning: The called method `initialize’ is defined here
/.rbenv/gems/2.7.0

元記事を表示

rails チュートリアル 2 週目!! ~ヘルスケアwebサービスを自分で作る医者の日記~

二週目

次回1.4.4 から

元記事を表示

Herokuってなんなの?

####使ったことはあるものの、よく知らなかったので調べてみました
![heroku.png](https://qiita-image-store.s3.amazonaws.com/0/322577/8405bf7a-075e-83c5-94d7-1de02dc6e14f.png)

#Herokuとは?
#####開発したWEBアプリケーションを10分程度で全世界に公開することができ、そのままサービスを本格的に運用することも可能なホスティングサービス

– Python/Java/Go/PHP/Node.JS/Ruby on Railsに対応可能
– salesforceが買収したサービス

##ホスティングサービスとは?

![fukidasi.png](https://qiita-image-store.s3.amazonaws.com/0/322577/5cdcf347-7c8b-e935-f261-c7ee9d02382e.png)

レンタルサーバ、共有サーバのこと
その中でSaaS、PaaS、IaaS、DaaSと呼ばれるものがあり、違いはどこまでクラウドとして用意してく

元記事を表示

初めてのWebアプリ制作 – ruby on rails – 2日目

#2日目の成果
– サイトマップの作成
Image from Gyazo
– ワイヤーフレームの作成
Image from Gyazo
– データベース図の作成
Railsチュートリアル 第14章 ユーザーをフォローする – [Follow] のWebインターフェイス – フォローのサンプルデータ

# サンプルデータの必要性

サンプルデータを先に用意すれば、バックエンドの実装とフロントエンドの実装を切り離すことができます。その期待できる効果の一例として、以下のようなものが挙げられます。

* コントローラー関係の実装なしでビューの実装のみを先に作ることができる
* `POST`や`DELETE`等のHTTPリクエストに対するテストと、`GET`リクエストに対するテストを切り離すことができる

# リレーションシップのサンプルデータを生成するためのコード

リレーションシップのサンプルデータを生成するためのコードの本体は、以下のようになります。

“`ruby:
users = User.all
user = users.first
following = users[2..50]
followers = users[3..40]
following.each { |followed| user.follow(followed) }
followers.each { |follower| follower.follow(user) }
“`

上記のコードは、以下のような動作

元記事を表示

Rubyのクラッシュ(??)

# 起きたこと
### サンプルアプリケーションをクローン
ターミナル

“`
$ git clone https://github.com/queq1890/exception_sample.git
“`
### gemの導入
ターミナル

“`
$ cd exception_sample
$ rm Gemfile.lock #bunlderのバージョンが古い可能性があるため、一度Gemfile.lokを削除しておきます
$ bundle install
“`
### データベースの設定(ここでエラーが出ました)
ターミナル

“`
# データベースの作成
$ rails db:create #ここでエラーが起きた
# マイグレーションの実行
$ rails db:migrate
# 初期データの投入
$ rails db:seed
“`

*※データベースの作成でエラーが起きました*

#解決策
brew list で確認したところ*mysql*が2つ存在していた為、mysqlを2つuninstallしました。(画像だと1つです。)
![image.png](h

元記事を表示

deviseとOmniAuthをRailsアプリケーションに導入しテストする

Ruby on Rails のアプリケーションに、 devise を利用して認証機能を実装し、更に Google アカウントに連携した認証機能とテストコードを実装します。よくありがちなユーザー認証機能をdeviseを使いサクッと実装し、Googleを使ったSNS認証機能とテストコードを実装する方法について解説していきます。

## 動作環境
– PostgreSQL 12.1
– macOS Catalina
– Ruby 2.7.0
– Rails 6.0.7.2

## 全体の概要
本記事では、3つのステップで進めていきます。
1. devise でサインイン機能を実装する
2. OmniAuth で Google アカウント機能を実装する
3. Omniauth のテストコードを実装する

## 1. deviseでサインイン機能を実装する
まずは、devise でサインイン機能を実装し、deviseとはどのような機能を持つGem(ライブラリ)なのかを掴みましょう。

本項は下記を参考にしました。

– [Railsでユーザー認証機能を実装しよう~定番のgem「devise」活用

元記事を表示

【Rails】マイグレーションまとめ

##基本
`rails g model`や`rails g migration`でマイグレーションファイルを作って、必要に応じて修正して、`rails db:migrate`でマイグレーション実行。

##テーブルを作成
“`terminal
$ rails g model User name email level:integer
“`
“`rb
def change
create_table :users do |t|
t.string :name
t.string :email, unique: true, null: false, limit: 100, index: true
t.integer :level, default: 1, comment: ‘ユーザーのレベル’
t.timestamps
end
end
“`
オプションもりもり。検索条件に使いそうなカラムにインデックスを貼ると、検索クエリを高速化できます。

##カラムを追加
“`terminal
$ rails g migration AddPhoneToUse

元記事を表示

半角英数字が折り返されずオーバーする。word-break: break-all; overflow-wrap: break-word;

##今回のメモは、チャット機能を備えたアプリを作った際の困りごとメモ。

チャットの文字数を例えば20文字として投稿したとします。
width幅は100pxと指定。

この際に、普通に
“`アイウエオアイウエオ
アイウエオアイウエオ“`

このようにwidthの設定をしてあれば決められた幅を過ぎた時点で折り返されます。

**しかし・・・・・・・**ここで困ったことになったのが。
半角英数字です。

例えば。

“`
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaと入力したとします。
すると本来全角10文字時点半角20文字時点で折り返されるはずが折り返されません。
“`
チャット枠を飛び越えて・・・文字が表示されてしまいました。

##そこで色々と調べた結果

CSSのbody設定すれば解決!
“`body {
word-break: break-all;
overflow-wrap: break-word;
}“`

簡単に説明を読んでみる。

**禁則処理とは?**

まず、「禁則処理」という言葉を理解しましょう。この意味は、「。」「、」「…」「?

元記事を表示

【Chart.js】Railsでレーダーチャートを簡易表示するまで

自己学習目的としてChart.jsで簡易表示するまでをまとめてみます。

#Chart.jsとは
無料のオープンソースJavaScriptライブラリ。
主にバー、ライン、エリア、パイ、バブル、レーダー、ポーラー、散布図の8つを動きをつけてCanvas で描画表示できるもの。

公式サイトのリンク
https://www.chartjs.org/

#環境
OS: Catalina v10.15.3
Ruby: v2.6.3
Rails: v5.2.4.1

#手順

1. 新規プロジェクトの作成
2. ディレクトリ移動
3. DB作成

“`
$ rails _5.2.4_ new chart_sample_app
$ cd chart_sample_app
$ bundle exec rake db:create
“`

エディタから`Gemfile`を開き、`Chart.js`のgemを追加する。

“`ruby:Gemfile

# Reduces boot times through caching; required in config/boot.rb
gem ‘

元記事を表示

gem  “gon” を利用した時に、他のJSが効かなくなる

#現状、背景
フリマアプリの出品した商品を編集する機能を実装していて、ここでは gem “gon” を使用して、出品した写真のデータ等を追加、削除できる機能実装したところ、

他の機能(商品出品、メインページにかけてるJS等)で、JSを使用したところが効かなくなるエラーが出てしまっている状況です。
##エラー内容
 他のJavascriptが効かなくなっている!!

## 該当コード

###items.controller
“`ruby

def update
@item = Item.find(params[:id])
@images = @item.images

ids = @item.images.map{|image| image.id }

exist_ids = registered_images_params[:ids].map(&:to_i)

exist_ids.clear if exist_ids[0] == 0

if (exist_ids.length != 0 || new_image_params[:im

元記事を表示

商品編集時(edit) からUPDATEができない 対処!

初めまして!某プログラミングスクールにて、フリマアプリを開発しました!
そこで、個人的に地獄のエラーを紹介したいと思います!

## 前提・実現したいこと

商品編集の際にUPDATEアクションを行いたい

商品の出品はできている。

## 発生している問題・エラーメッセージ
エラーGIF
https://gyazo.com/4dc564d739cad8f4ac8a0123371860bd

“`
POST http://localhost:3000/items/1 400 (Bad Request)
“`
“`
Navigated to http://localhost:3000/items/1
Navigated to chrome-error://chromewebdata/
Navigated to http://localhost:3000/items/1/edit
edit:1 A cookie associated with a cross-site resource at http://google.com/ was set without the `SameSi

元記事を表示

CarrierWave、MiniMagickでリサイズしたい【確認画面付】

## CarrierWave、MiniMagickを使用した画像投稿のリサイズ

“`uploaders/post_image_uploader.rb
class PostImageUploader < CarrierWave::Uploader::Base include CarrierWave::MiniMagick storage :file def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end ## 追記 process :resize_to_fit => [300, 300]
version :thumb do
process :resize_to_fit => [400, 400]
end
## ここまで
end
“`

## 確認画面がある場合【おまけ】

**ルーティング**

“`routes.rb
resources :posts do
collection do
p

元記事を表示

【Rails】ログにDeviseのユーザーIDを出力する

[昨日](https://qiita.com/notozeki/items/b974f3db166a21f18e22)に引き続き Devise ネタ。Rails で、ログに Devise のユーザーIDを出力する方法をまとめる。

なるべくシンプルに、素の Rails の機能だけを使って実現する。追加ライブラリ、カスタム logger や Rack ミドルウェアは不要:muscle:

以下のバージョンで動作を確認している。

* Rails 6.0.2.1
* Devise 4.7.1

# TL;DR

以下のようなコードで、

“`config/environments/development.rb
config.log_tags = [
->(req) {
session_key = (Rails.application.config.session_options || {})[:key]
session_data = req.cookie_jar.encrypted[session_key] || {}

users =

元記事を表示

(Rails)resourcesの7つ道具

Railsで定義されるresources7つ。
非常に重要で覚えておくと役に立つとのことなので記載しておきます。

| アクション名     | どのような時に動作するか   |
|:—————–|—————————————-:|
| index | 一覧表示ページを表示するリクエストに対応して動く|
| new | 新規投稿ページを表示するリクエストに対応して動く |
| create | データの投稿を行うリクエストに対応して動く |
| show | 個別詳細ページを表示するリクエストに対応して動く |
| edit | 投稿編集ページを表示するリクエストに対応して動く |
| update | データの

元記事を表示

webpacker でページごとにスタイルを分ける

こんにちは、 streampack の minsu です。
東京オリンピックが決まった時はまだまだ先だと思っていた2020年が来ましたね!あまり実感がないですが!

## はじめに
ページごとに読み込まれるcssとjsを変更したいことがあるかと思います。
RailsでWebpacker利用時にページごとにcss,jsのスタイルを分ける方法をまとめました。

作業内容は次の通りです。
・エントリポイントを複数作成する
・ページごとに対応するエントリポイントを呼び出す

また、こちらの過去の記事の環境を使っています。
[Docker + Rails + React](https://qiita.com/minsu/items/0ccbafff460e72b13d44)

## ファイル構成

### Webpackerディレクトリ構成

Webpackerのconfigを見てみると
`app/javascript` にjs,cssを
`app/javascript/packs`にエントリポイントを配置し
ビルド後のファイルは`public/packs`に格納されるようになっています。

`

元記事を表示

Ruby 2.6 Rails 6.0でMongoDBを使うとSegmentation Faultが起きたらconcurrent-rubyを疑え

一過性の高い記事です。

## プロセスを終了するときにSegmentation Faultが起きる

RailsコンソールやRails runnerで、mongodbにデータを一括投入するバッチを走らせると

“`
MONGODB | [25] mongodb:27017 | admin.endSessions | SUCCEEDED | 0.000s
[BUG] Segmentation fault at 0x0000000000000014
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
— Control frame information ———————————————–
c:0001 p:—- s:0003 e:000002 (none) [FINISH]
— Machine register context ————————————————
RIP: 0x00007f2

元記事を表示

OTHERカテゴリの最新記事