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

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

BootstrapをSassで編集するための手順

#はじめに
簡単そうで意外と面倒だったSassの使い方を備忘録として書いておきます。
※この記事は既にBootstrapが導入されていて、これからSassを使ってレイアウト編集することを想定しています。

Sassを使おうと思ったきっかけは[現場で使える Ruby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227)を使ってタスク管理アプリを作成中に細かいレイアウトを編集したいなと思ったのですが、参考書ではBootstrapだけを使った装飾しか使われていなかったためです。

そもそもSassって何?という人は以下のリンクを参照
[これからはcssはSassで書こう。](https://qiit

元記事を表示

GETとPOST(GET以外)で同じコード、でも挙動が違う

ちゃんと調査しないと気付かなかったのでメモがてら、誰かが同じ問題に直面したときの助けになれば。

# 概要
ある日、GETとPOSTで挙動が違うという話が。
コードを見てみたら、コントローラーの同じアクションにGETとPOSTがルーティングされていました。
どう見ても同じ処理。そこに差異は無いので挙動ベースでデバッグしてみることに。
テストコードでは上手く動いていました。でも直接APIを叩いてみると、たしかに違う挙動。

最終的に気付いたのが、問題のあるリクエストではCSRFトークンが渡ってきていないことでした。
アクション内ではsessionが使われており、CSRFトークンが渡されていないことでリクエストは空のsessionに対して処理されていました。これは元々のsessionとは別のものとして扱われ、その結果挙動が変わってしまっていました。

# 詳細
例としてこのようなコントローラがあるとします。
(POSTの代わりにDELETEにしていますが、挙動は同様です)

“`ruby:app/controllers/session_controller.rb
class Sessio

元記事を表示

Rails  テーブル作成、カラムの追加や削除

## はじめに
よく忘れるので、メモ

## モデル作成 テーブル作成

railsでモデルを作成する際に、テーブルを作成するためのマイグレーションファイルが同時に作られます。
↓モデル作成コマンド

“`
$ rails generate model [モデル名] [属性名:データ型 属性名:データ型・・・] [オプション]

省略版
$ rails g model [モデル名] [属性名:データ型 属性名:データ型・・・] [オプション]
“`
-コマンドを実行すると、自動で作られるファイル

 ①モデルのクラスファイル
 ②マイグレーションファイル
 ③モデルの自動テスト
 ④モデルの自動テストで使うfictureファイル

“`
例 $ rails g model User name:string email:string
上のコマンドで作ると下のマイグレーションができる。

class CreateUsers < ActiveRecord::Migration[5.2] def change create_table :users do |t|

元記事を表示

deviseで複数モデルを管理

# deviseで複数のモデルを管理

最近、ECサイトを開発するにあたり、出てきたユーザーのログイン機能実装。

ですが、ECサイトのようなユーザーとは別な使用(今回でいう注文の確認と新規商品等の確認)をする管理者もログインが必要になる場合、どうしたらいいかということで下記サイトを参考にしました!

https://qiita.com/Yama-to/items/54ab4ce08e126ef7dade

ここからは自分の頭を整理するために流れを簡潔にまとめて見ました。

rails g devise:install

config/initializers配下にdevise.rb が追加される。

最後の

config.scoped_views = true

に変更してコメントアウト。
このファイル他にもコメントされている部分があってなんかすごい大事そうな気配がしたので、それぞれの意味を調べて見ました!
下記がとてもわかりやすくまとめてありました!

https://qiita.com/linkss/items/9b005ebc2ef81a39afa2

元記事を表示

Selenium::WebDriver::Error::StaleElementReferenceError

#開発環境

・Ruby: 2.6.3
・Rails: 6.0.3
***

#Selenium::WebDriver::Error::StaleElementReferenceError
**system specのテスト時**に以下のエラーが出ました。

“`rails

Selenium::WebDriver::Error::StaleElementReferenceError:
stale element reference: element is not attached to the page document
(Session info: chrome=83.0.4103.116)
“`

#ドキュメント

“`
A command failed because the referenced element is no longer attached to the DOM.

訳:参照された要素がDOMにアタッチされなくなったため、コマンドが失敗しました。
“`

#エラーが起きたテストをみてみる

“`spec/system

元記事を表示

【Rails】resourceとresourcesは別物ですね

題の通りです。
私はタイポに気づかず1時間悩みました。

#環境
Rails v5.2.4.3
Ruby v2.5.1

#やりたかったこと
index.html.erb内にlistsコントローラーのeditにつながるリンクを作りたかったです。

“`list_controller.rb
def index
@lists = List.order(“id”)
end
“`

“`index.html.erb
<% @lists.each do |list| %>
<%= link_to "編集", [:edit, list] %>
<% end %>
“`

“`routes.rb
resource :lists
“`

ここまで授業を振り返りながらやっていたつもりだったから間違えていると思っていなかった。
だがしかしエラーが出る。

“`
undefined method `edit_list_path’ for #<#:hogehoge>
“`

メソッドがないと。

ターミナルの方でルーティングを出してみました。

“`
$ rail

元記事を表示

Error ExecJS::RuntimeUnavailable: 発生時の対処法

#発生現象
AWSのEC2でWebサーバ、アプリケーションサーバの設定時に、環境変数の設定をする際の`$ rake secret`を実行した際に下記Errorが発生。

“`terminal:terminal
ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.
/var/www/chat-space/config/application.rb:7:in `
/var/www/chat-space/Rakefile:4:in `require_relative’
/var/www/chat-space/Rakefile:4:in `
(See full trace by running task with –trace)
“`
→Javascriptがうまく走っていないので、[Node.js](htt

元記事を表示

railsのバリデーションとnull: false 自分用メモ

バリデーションとは、リクエスト側が送信した特定のカラムの値が空のままだったり、意図しない形で保存されるようなことを防ぐために、予めモデルに記述しておく、門番のような役割。

valid.png

上記の例だと、

text「通りまーす」
validates「待て」
text「えっ」
validates「お前何も入力されてないじゃないか。やり直し」
text「ぴえん」

こんな感じ。

一方でnull: falseとは。
実はこちらも空のままのデータを受け入れないための門番、その2。
null.pngRailsの存在確認メソッド 使い分けメモ (any?/empty?/present?(!blank?)/nil?)

# はじめに
Railsのビューで、「画像があったら表示させる」みたいな処理を書く場面がありました。
存在確認のためのメソッドは、Rubyのもの、Railsのもの含め、いくつかあります。
ちょっと調べて、「よし、これで行こう!」とメソッドを選択してレビューに出したところ、おもいっきり玉砕したので、今後間違えないように備忘録として残しておきます。

# 環境
macOS Catalina Version 10.15.5
Ruby: 2.6.5
Ruby on Rails: 6.0.3

# 調査対象
– any?(Ruby)
– empty?(Ruby)
– nil?(Ruby)
– present?(Rails)

#動機
過去にも類似の記事はあり、実際に大部分、「[rubyの真偽判定メソッド(nil?/empty?/blank?/present?)を検証してみた結果、興味深いことがわかった](https://qiita.com/go_d_eye_0505/items/541110cb9821734b0623)」に乗っからせていただきました。そのうえで、今回投稿に至った理由は、以下とな

元記事を表示

【Railsアプリ、AWS、SendGrid】550 Unauthenticated senders not allowed

RailsアプリをAWSにあげたらSendGridのメールが送れなくて困った。
レイルズチュートリアルの11章の設定を参考にしたままだった模様。

なので、基本設定はこちらを参考にした。
https://sendgrid.kke.co.jp/docs/Integrate/Frameworks/rubyonrails.html

※ユーザーネームとパスワードはenvファイルを使うこと。
こんな感じ。

“`
ENV[‘SENDGRID_USERNAME’]
ENV[‘SENDGRID_PASSWORD’]
“`

で、修正したのに以下のエラーが消えない

“`
550 Unauthenticated senders not allowed
“`

なんで??と悩むこと1週間ほど。結論を書きます。
①インスタンスを再起動
②nginxを再起動
③Unicornを再起動
②と③は以下を参考にした。
https://qiita.com/naoki_mochizuki/items/5a1757d222806cbe0cd1#%E7%A2%BA%E8%AA%8D

EC2サーバーとWEBサー

元記事を表示

【Rails】Bootstrap3を用いた画像スライドショーの実装

# 目標
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/99f925e0-0b2f-7adf-3aed-e09a36fd6597.gif)

# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina

# 前提

下記実装済み。

・[Slim導入](https://qiita.com/matsubishi5/items/b639ffddecc626856039)
・[Bootstrap3導入](https://qiita.com/matsubishi5/items/b117c95f4dd71340cc80)
・[投稿機能実装](https://qiita.com/matsubishi5/items/1a5aeab651b5822d1f2c)
・[画像複数アップロード機能実装](https://qiita.com/matsub

元記事を表示

【Windows】gem install sqlite3ができない

# 環境
ターミナル: MSYS2(mintty+bash+pacman)
Ruby 2.6 + DevKit
Windows10 64bit

# SQLiteのバージョンは問わないという人

SQLite 1.3.13をインストールしよう
コンパイル済だからエラー出ることはないはず。

“`
gem install sqlite3 –version 1.3.13 –platform ruby
“`

# mkmf.logを見て
[①~package configuration for sqlite3 is not found篇~](https://qiita.com/nicokazu/items/944318dc0ef5746e2b9d)
[②~Cannot create temporary file in C:\篇~](https://qiita.com/nicokazu/items/3f6a6bc4b8f31b300648)
模索中…

# 出てくるエラー
“`
C:\Users\foobar>gem install sqlite3 –platform ruby

元記事を表示

【Windows】gem install sqlite3ができない ~package configuration for sqlite3 is not found篇~

# 原因
SQLiteのソースファイルが欠損している

# 解決
MSYS2コンソールで以下のコマンドを実行

“`bash
pacman -S libsqlite-devel
“`

あとはコマンドプロンプトでも良いのでgem install sqlite3 –platform rubyを実行します。

# エラー内容
“`
package configuration for sqlite3 is not found
“x86_64-w64-mingw32-gcc -o conftest.exe -IC:/Ruby26-x64/include/ruby-2.6.0/x64-mingw32 -IC:/Ruby26-x64/include/ruby-2.6.0/ruby/backward -IC:/Ruby26-x64/include/ruby-2.6.0 -I. -D__USE_MINGW_ANSI_STDIO=1 -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0600 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET

元記事を表示

【Windows】gem install sqlite3ができない ~Cannot create temporary file in C:\篇~

# 原因
Windowsのユーザ名に2バイト文字(日本語)が使われている

# 解決
Tempファイルの位置を移動させる。
コマンドプロンプトで以下を実行

“`
mkdir C:\temp
set TEMP=C:\temp
set TMP=C:\temp
“`
日本語が使われていなければどのディレクトリでも大丈夫です。
あとはコマンドプロンプトでも良いのでgem install sqlite3 –platform rubyを実行します。

# エラー内容
“`
“pkg-config –exists sqlite3”
| pkg-config –libs sqlite3
=> “-LC:/msys64/mingw64/lib lsqlite3\n”
“x86_64-w64-mingw32-gcc -o conftest.exe -IC:/Ruby26-x64/include/ruby-2.6.0/x64-mingw32 -IC:/Ruby26-x64/include/ruby-2.6.0/ruby/backward -IC:/Ruby26-x64/include/ruby

元記事を表示

Ransackのsort_linkで孫テーブルの値でソートする

めちゃめちゃハマったので個人的なメモ。

親を表示してるけど中間テーブルを通して別テーブルの値を表示していて、その列をソートしたいとき

“`
<%# 子テーブル名_孫テーブル名_属性名 %>
<%= sort_link(@q, :child_grandchild_name, '孫の名前') %>
“`

でいける。
テーブル名に”_”が入ってても大丈夫。

元記事を表示

ncestryによる多階層構造データを表示、投稿!! ~Ajax~

# はじめに
ancestryで作成したカテゴリーデータを用いて、選択肢を動的に変化させる機能を実装しました。

学習メモとして投稿します。
まだ、理解が浅いところもありますが参考になればと思います!

完成形

https://gyazo.com/8a5adc080698873d544b8665855c0901

以下が完成コードです!

“`ruby:routes

resources :products, except: [:index] do
get ‘new/children_category’, to: ‘products#children_category’
get ‘new/grandchildren_category’, to: ‘products#grandchildren_category’
end
“`

“`ruby:puroducts_controller
before_action :set_categories, only: [:edit, :update]

〜省略〜

def children_cate

元記事を表示

Rspec 複数のselectタグのテストを実行する時の注意

###テストを実行したい該当のコード
ツアー情報を投稿する際に、ジャンルを選択して保存するようにさせている。
selectタグでvalueが1のoptionを選択してジャンルを保存するテストをやってみたい
スクリーンショット 2020-07-01 15.45.03.png

とあるページを参考にHTMLに表示される内容(以下だと冒険)を入力してテスト走らせてみた。

“`tour_spec.rb
it ‘tour投稿に成功する’ do
select ‘冒険’, from: ‘tour[genre_id]’
end
“`

###ハマったエラー

“`ruby:
Failure/Error: select ‘冒険’, from: ‘tour[genre_id]’
Capybara::Eleme

元記事を表示

【Rails】UrlHelperを拡張する

# 独自のUrlHelperを定義したい

`Rails.application.routes.url_helpers` を include したClassを作成するとよいです。

“`ruby

class MyUrlResolver
class << self include Rails.application.routes.url_helpers end # 独自定義したhelper def self.custom_users_path(user) if user.admin? admin_users_path else users_path end end end ``` これで、 ``` > MyUrlResolver.admin_users
=> “/admin_users”
> MyUrlResolver.users_path
=> “/users”
“`

標準のUrlHelperに加えて、

“`
> MyUrlResolver.custom_users_path(admin_us

元記事を表示

master.keyが見つからない問題

# master.keyが見つからない問題

デプロイ環境構築の過程で`master.key`なるものが必要に

Railsアプリのローカル環境に
`config/master.key`がみつからない

# 原因

– `.gitignore`に含まれており、`git clone`の過程で失われたと思われる

– 開発途中で環境を変化(Cloud9 >> ローカル)に移行したことが発端かと

# 参考

[Rails5.2から追加された credentials.yml.enc のキホン – Qiita](https://qiita.com/NaokiIshimura/items/2a179f2ab910992c4d39)

# 解決

一旦`**credentials.yml.enc**`を削除して
master.keyもない状態で次のコマンドを入力

“`
sudo EDITOR=”vi” bin/rails credentials:edit
“`

すると
`credentials.yml.enc`と`master.key`が生成される

“`
$ vi config/ma

元記事を表示

yarn install ができない

## 前提
– ruby on rails 6.0.0 を使用。
– エラー文における/~/表記はフォルダ名やアプリ名などのディレクトリ構造として読み替えること。
– 細かい条件は把握しきれていないので同じ症状が起きた場合の解決策の1候補として考えること。

## 発生したエラー
*git clone* で持ってきたアプリを編集する際、 *yarn install* をしようとしたところ、下記のようなエラーが発生した。(全文は長すぎるため直接エラーが出ている箇所のみ記載)
> warning Error running install script for optional dependency: “/Users/~/node_modules/fsevents: Command failed.

~

> error /Users/~/node_modules/node-sass: Command failed.

## 解決方法
*yarn upgrade* というコマン

元記事を表示

OTHERカテゴリの最新記事