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

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

Rails 開発Tips 個人メモ

#PutとPatch
PATCHとPUTはHTTPメソッド名が違うだけで役割は同じ。rails3まではPUTrils4からPATCHに移行。

#Viewには繰り返しの構文使うな
Modelクラスでインスタンスmethodなどを定義してViewで使ってViewクラスの見た目をすっきりさせよう。

#form_for内で用いられるf.○○タグ名 :カラム名について

“`ruby
<%= f.text_field :name %>

“`
上と下は同じ

#params.require
requireメソッドはストロングパラメーターのメソッド。
ストロングparameterを使うと以下のように邪魔なparameterがいっぱいついてきます。
“`
Parameters: {“utf8″=>”✓”, “authenticity_token”=>”sdva”, “user”=>{“name”=>”たけし”, “email

元記事を表示

form_forで任意のcontrollerとactionを指定する方法

#form_forで任意のcontrollerとactionを指定する

##今回実現したいこと
topクラスのindex.html.erbからform_forを用いて、usersコントローラーまで入力データを送りたい。

###エラーの出る書き方

“`ruby:app/views/top/index.html.erb
<%= form_for @user,:url => { action: “new”} do |f| %>

Submit

<%= f.label :name, 'Username' %>
<%= f.text_field :name, class: 'form-control' %>
<%= f.label :password, 'password' %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :confirm, 'password_confirmation' %>
<%= f.passwo

元記事を表示

Ruby on Rails 6のDockerでの環境構築

Ruby on Rails Advent Calendar 2019 5日目の記事になります。

Ruby on Rails 4.2のみ経験者でちょっと触れただけですが、3年ぶりくらいに環境構築してみました。
本当は環境構築だけじゃなくて弄くり回しかったところですが、環境構築だけでタイムアップでした。

[【Rails】Rails 6.0 x Docker x MySQLで環境構築](https://qiita.com/nsy_13/items/9fbc929f173984c30b5d)
[zazk/Rails-6-Docker-Alpine](https://github.com/zazk/Rails-6-Docker-Alpine)
[Quickstart: Compose and Rails](https://docs.docker.com/compose/rails/)
を大いに参考にさせていただきました。

# 環境

– macOS Mojave
– Docker for Mac
– Ruby on Rails 6.0
– PostgreSQL 11.1

## 初期状態の

元記事を表示

【Rails】bundle installをしたら大量のファイルを作る問題

# 初めに
bundle installをした際にgithubDesktopに新しいファイル生成10000ファイルのようにたくさんのファイルを生成したことはあるでしょうか。この問題に時間を使ってしまったので書き残します。

# 結論
bundle installをした際に大量にファイルが生成されるのは問題ではないです。正常な挙動です。本来、railsのgemのシステムは大量のファイルの上で成り立っておりそのファイルの数を普段見ることはないですがgithubDesktopでその大量の変更を見ることができるのが問題と言えるでしょう。

# 原因
私は普段はgem fileにgemを追加した後に`bundle install`とターミナルに打つことでinstallをしているのですが、qiitaの記事を真似していて`bundle install –path vendor/bundle`と入力しました。この後に続く表記はbundle installしたファイルをどこに保存するのかということを指定しているもので本来は毎回このように打つことが正しいようです。ただしこのように打ったことでgithub

元記事を表示

【Rails】ユーザーのフォロー機能その3 フォローボタンの実装【Rails Tutorial 14章まとめ】

##フォローボタンの実装
###Relationshipsコントローラ
フォロー/フォロー解除ボタンが機能するように、Relationshipsコントローラを作成する。

“`console
$ rails generate controller Relationships
“`
Relationshipsコントローラに必要なのは、フォロー用のcreateアクションと、フォロー解除用のdestroyアクションだけである。
よって、ルーティングは以下のようになる。

“`config/routes.rb
Rails.application.routes.draw do
.
.
.
resources :users do
member do
get :following, :followers
end
end
resources :microposts, only: [:create, :destroy]
resources :relationships, only: [:create, :destroy]
end
“`

#

元記事を表示

【Rails】ユーザーのフォロー機能その2 webインターフェイス【Rails Tutorial 14章まとめ】

##webインターフェイス
フォロー機能が構築できたので、実際にアプリケーション上で使えるようにしていく。

###フォローのサンプルデータ
seedファイルを編集して、サンプルユーザー間にフォロー・被フォロー関係を構築する。

“`db/seeds.rb
# ユーザー
User.create!(name: “Example User”,
email: “example@railstutorial.org”,
password: “foobar”,
password_confirmation: “foobar”,
admin: true,
activated: true,
activated_at: Time.zone.now)

99.times do |n|
name = Faker::Name.name
email = “example-#{n+1}@railstutorial.

元記事を表示

【Rails】 N+1問題の解消 & tips

[Atrae Advent Calendar 2019](https://qiita.com/advent-calendar/2019/atrae) 5日目を担当する新卒1年目の土屋です。
普段は、ビジネス版マッチングアプリ [yenta](https://yenta.talentbase.io/yenta) でサーバサイドエンジニアとしてRailsで開発をしています。

アトラエに入社してから半年間、度々立ち向かってきたN+1問題について書きます。
対象読者は、Ruby on Railsを使って開発をしている初級者〜中級者です、ご容赦ください。

# N+1問題とは
> ループ処理(each, mapなど)を用いてデータを取得してくる際に、
> 必要以上にSQL文(クエリ)が発行され、レスポンスが遅くなる(パフォーマンスが低下する)

ことです。例えば、
AさんというUserのPosts(投稿)を5件取得して、Aさんの投稿一覧のページを表示したいといった時には、

– AさんのUserデータを取得するために1回
– 5件のPostsデータを取得するために5回

の合計6回のクエリを発

元記事を表示

[Rails] undefined method `’ はself.メソッド名で解決する時がある。

### エラー内容

RailsでModelに定義したメソッドがControllerで呼び出すと、”undefined method `メソッド名'”になるエラー。(ControllerとModelで同じメソッド名を定義している場合)

### 解決方法

モデルのメソッド名の前に **”self.”** を付けたらエラー解消され、
コントローラーで呼び出せた!!

“`models/モデル名.rb
def self.メソッド名
end
“`

### コード詳細

controllerもmodelも両方、”import_csv”という名前で定義したため、エラーが発生した可能性あり。(追加検証は省略)
modelで定義したメソッドに”self.”をつけることでエラー解消。

“`controllers/import.rb
#コントローラー
class ImportController < ApplicationController def import_csv if Information.import_csv(params[:csv_file]) xx

元記事を表示

【Rails】ユーザーのフォロー機能その1 UserモデルとRelationshipモデルの関連付け【Rails Tutorial 14章まとめ】

##フォロー機能
特定のユーザーをフォローできるようにし、フォローしたユーザーのマイクロポストをフィードに表示できるようにする。

##Relationshipモデル
###能動関係と受動関係
ユーザーAがユーザーBをフォローしている場合、AにはBをフォローしている(following, follower)という能動関係がある。
逆に、BにはAにフォローされている(followed)という受動関係がある。

この関係を構築するために、Relationshipモデルを作成する。
Relationshipモデルには、フォローしているユーザーのIDを保存するfollower_idと、フォローされているユーザーのIDを保存するfollowed_idカラムがある。

“`console
$ rails generate model Relationship follower_id:integer followed_id:integer
“`
Relationshipモデルからは頻繁にユーザーを検索することになるので、インデックスを追加する。

“`db/migrate/[timestamp

元記事を表示

railsのDigest::UUIDを試す

# Digest::UUID見てみたのでメモ
## 公式ドキュメント
https://api.rubyonrails.org/classes/Digest/UUID.html

## 概要
定義されているメソッドは以下の3つでそれぞれハッシュ関数が違います。

* self.uuid_v3
-> `Digest::MD5`を使用
* self.uuid_v4
-> `SecureRandom.uuid`の簡易メソッド。
* self.uuid_v5
-> `Digest::SHA1`を使用

“`ruby
$ Digest::UUID.uuid_v4
=> “4ad2a6a9-0135-4158-94d3-a33e41bbe048”

$ Digest::UUID.uuid_v3(“name_space”, “sample”)
=> “3b0ead59-ca8d-350b-a392-e656db58b0fc”

$ Digest::UUID.uuid_v5(“name_space”, “sample”)
=> “d7a9ae1a-b099-5318-8828-340cc10a1550

元記事を表示

【英語】follower/followedの話【Rails】

##followうんぬん
Railsチュートリアル14章をやっていて、followという単語の変化形がどのような意味で使われているかが分かりにくいと感じたので、整理しようと思う(僕だけかもしれないけど)。
この分かりにくさは、単に英語の文法的な話だけでなく、(世間一般の)慣習的な話が絡んでくることから生じていると思う。
よって、能動とか受動、分詞といった英文法を理解できていても、頭に?が浮かぶことになる。

###followerとは何か?
followerはユーザーをフォローしている人である。
AがBをフォローしている場合、Aのことを指す。

“`
A follows B
“`
である。

しかし、twitterの話題とかで「フォロワー」という言葉を使った時、AとBどちらのことを言っているのだろう。
「フォロワーに〇〇さんっていう人がいて〜」なんて言った場合に、上の意味を使って主体であるAを指すとしたら、自分のことを「フォロワー」と言っていることになる。
つまり、この文脈ではBを指すことになる。
世間一般的な「フォロワー」の使い方としては、こちらがスタンダードなんじゃないかと思う

元記事を表示

アセットプリコンパイル時のuninitialized constantのエラー

# はじめに

今回のエラーの解決策は至ってシンプルであり、凡ミスでもあったが、
今後忘れないよう、自分への備忘録として記録しておきます。

# 状況

・Herokuへのデプロイ時にアセットプリコンパイルがうまくいかない。
・GemのDeviseの実装テスト中

# 原因から解決まで

アセットプリコンパイルを実施。

“`
rails assets:precompile RAILS_ENV=production
“`

以下エラー文が発生。

“`
NameError: uninitialized constant Devise
“`

Deviseの読み込みがうまくいっていないとのこと。

“`ruby:Gemfile
group :development, :test do
gem ‘devise’
end
“`

Gemfileのテスト環境位置にgem ‘devise’を記入した状態でしかbundle installしていなかったので、本番環境に位置に変更してbundle installでOK。

経験値が少なすぎるからかなかなか気づけませんでした。。。

元記事を表示

大丈夫、俺もDocker分かってないから一緒にやろう。

# はじめに:挫折しても良い

プログラミング学習って、用語の難しさとか学習コストの高さとかでやっぱ大変なことですよ。
時代が変わって、ハードルは低くなったが未だに「難しそう」という固定概念はあるし、やった事がないことなんて大抵難しいそうなもんです。。
いまだにプログラミングってやつには全然なれなくて、めっちゃ悔しいわけだが、アウトプットをさせて欲しいです。

#公式の説明文でポルナレフ状態になろう(困惑)

まず最初にみてもらいたいのは、docker社の公式HPでの説明文だ。
え、エンジニアは英語にアレルギー感じちゃダメだって・・?

「そうかもしれないが、今じゃない。俺はDockerが触りてえんだよ゛お゛お゛ぉ゛お゛!゛!゛!゛ん゛あ゛あ゛あ゛あ゛あ゛ぁ゛ぁ゛あ゛あ゛!゛!゛!゛!゛。」
ってことで翻訳にかけてみた。

スクリーンショット 2019-11-24 0.08.24.pngrailsの今日学んだアクションについてのまとめ

今回学んだアクションはresourcesメソッドの new edit の2つについてです。

###newメソッド 新規登録画面

“`books_controller.rb
def new
@book = Book.new
end
“`
という風に定義する
Book.newを渡してあげることで新しく登録するための設計図をnewが得ることができます。
ビューの方には、このような記述をします。

“`new.html.erb
<%= render 'form', book: @book %>
“`
renderメソッドでformからテンプレートを引っ張ってきていることがわかります。
このようにするのは登録画面も編集画面も共通のものを使用できるので、外部化することで重複したコードの記述を避けるためです。
bookに@bookを渡すことでform内でも定義を使用できるようになります。

###editメソッド 編集登録画面

“`books_controller.rb
before_action :set_book, only: [:show, :edit, :update

元記事を表示

Elasticsearch 6.8.X に上げるときの注意点

# TL; DR
– ヒープサイズのデフォルト値が2GBから1GBに変更になりました。
– itamaeで`jvm.options`を管理している方は要注意。
– デフォルト値の指定で書き換えを行っていると、書き換えされずデフォルト値のままElasticsearchが起動されます。
– like_textからlikeへの変更
– [kibanaでの差分](https://github.com/elastic/kibana/pull/16936/files)
– more_like_this
– elasticsearch-railsのmongoidのimport処理で障害になった
– [importo処理](https://github.com/elastic/elasticsearch-rails/blob/5.x/elasticsearch-model/lib/elasticsearch/model/adapters/mongoid.rb#L65)を実行する
– countクエリが走る
– メタ情報で帰ってこないから素直にカウ

元記事を表示

rubyのバージョンアップのときのエラー対処

rubyをバージョンアップをして、*budnle install*を叩いたら、

“`
Fetching: mysql2-0.3.18.gem (100%)
Building native extensions. This could take a while…
p
ERROR: Error installing mysql2:
ERROR: Failed to build gem native extension.

/Users/my_username/.rvm/rubies/ruby-2.1.2/bin/ruby -r ./siteconf20150614-72129-orqsb7.rb extconf.rb
checking for ruby/thread.h… yes
checking for rb_thread_call_without_gvl() in ruby/thread.h… yes
checking for rb_thread_blocking_region()… yes
checking for rb_wait

元記事を表示

railsで超シンプルなコメント機能を作った時の手順

rails g controller comment
rails g model Comment post_id:integer comment:string
rails db:migrate

ルート
post “comments/create/:id” => “comment#create” # :idはcommentテーブルのpost_id参照に使う

コントローラ
def create
@comment = Comment.new(post_id: params[:id],
comment: params[:comment])
@comment.save
redirect_to “/”
end

ビュー
formforを取り付けたいビューに張り付け
@comment = Comment.new()をformforに連動するアクションに張り付け

posts/showの下部にコメント入力と送信、表示を取り付ける。
最初はコメ

元記事を表示

【gemなし】Railsのseeds.rbでuserのシードデータを500人作る!

## Userのシードデータを作ろうと思ったらemailにunique制約つけていて、シードデータ毎にemailを変えないといけないのでメモ。

“`seeds.rb
500.times do |i|
User.create!(name: “sample#{i + 1}”, email: “sample#{i + 1}@example.com”, password: “password”, password_confirmation: “password”)
end
“`

以上です。

参考
https://qiita.com/sakakinn/items/425b49cffacdbb19c451

元記事を表示

Rails:ajax通信の流れとデバッグの解説[超初心者編]

##まずはじめに
ajaxを勉強中に簡易なrailsアプリを作りました。
その時大枠の処理の流れが大切だと感じたので今回復習も兼ねて解説してみようと思います。

大枠の流れを理解していると**エラーが起きた際にどこでデバッグしてどの変数の中身を見たら良いか、どこまでは処理がうまく書けているか。**という原因特定をする際に非常に便利です。

むしろ流れを理解していないとエラー解決は手探りでの作業となってしまい非効率です。

##作ったアプリ内容

検索フォームからDBに保存してあるユーザー情報を表示する

アプリGIF
https://gyazo.com/ac90a773abec869ddb72d59037f62f46

[したいこと]
検索フォームにキーワードを入力された毎にユーザー検索して該当するユーザー名を表示する

[必要な手段]
検索フォームに入力されたら反応
フォームに入力されたキーワードを取得
コントローラでキーワードを元にユーザーテーブルを検索
検索結果をビューで表示する

#対象者
この記事では、ajax通信とは、
**どのようにして送信先を決めているのか**、
**

元記事を表示

form_forのselectタグでRequiredを適用させる

### やりたいこと
railsのフォームで`required: true`を記述すると、空の送信を防げる。
selectタグでも同様のことをしたい。

### やること
“`:erb


<%= f.select :category, [["弊社サービス・お見積りについて", 1], ["採用について", 2], ["その他", 3]], :include_blank => “選択してください ▼”, :required => true %>

“`

上記のコードだとなぜか`required`が効かない。

“`:erb


<%= f.select :category, [["弊社サービス・お見積りについて", 1], ["採用について", 2], ["その他", 3]], { :inclu

元記事を表示

OTHERカテゴリの最新記事