Rails関連のことを調べてみた2021年09月19日

Rails関連のことを調べてみた2021年09月19日
目次

UnknownAttributeErrorが出た時の対処方法

UnknownAttributeErrorはカラムが追加されていない時のエラー

テーブル確認

schema確認

そもそものところ確認して問題なし

“`
rails db:migrate:status
“`

“`
rails db:migrate:reset
“`

“`
rails db:migrate
“`

エラーが解消された

元記事を表示

Fctory_bot アソシエーション:belongs_toの記述

comment(コメント)がstaff(ユーザー)、ostomy(投稿)にbelongs_to

“`models/comment.rb
class Comment < ApplicationRecord belongs_to :ostomy #投稿 belongs_to :staff #ユーザー validates :comment, {presence: true} end ``` ```models/staff.rb #ユーザーモデル class Staff < ApplicationRecord has_many :comments end ``` ```models/ostomy.rb #投稿モデル class Ostomy < ApplicationRecord has_many :comments ```

associationを用いて記述

has_manyはassociationの記述不要

“`factorys/cooments.rb
FactoryBot.define do
#医療staffが

元記事を表示

【Ruby on Rails】頻出しそうなFormHelperをまとめる

#対象者

* form_with, form_forを使っている方へ

#目的

* FormHelperにどんな種類があるか把握して、引き出しを増やすこと

#実際の手順と実例
###1. 前提

form_withの基本構文は下記の通りです。

https://qiita.com/nao0725/items/e5685d4851d8329d9e73

###2. よく使用するFromHelper一覧

| 1 | 2 |
|:-:|:-:|
| check_box | チェックボックスタグを生成 |
| file_field | ファイルアップロード用のタグ生成 |
| hidden_field | 特定の属性にアクセスするための、隠されたinputタグを返す |
| label | フォームに属した名前(ラベル)を返す|
| password_field | パスワードのためのタグ生成 |
| radio_button | ラジオボタンをタグを生成|
| text_area|長文用テキストを生成|
| text_field | 短文用のテキ

元記事を表示

railsチュートリアル第五章 アセットパイプライン

##Sassとアセットパイプライン
最近のRailsに追加された機能の中で最も特筆すべき機能の1つは、CSS、JavaScript、画像などの静的コンテンツの生産性と管理を大幅に強化する「“`アセットパイプライン“`(Asset Pipeline)」
アセットパイプラインは、Webpackや、Yarn(のどちらともうまく動きます。

このセクションでは、“`アセットパイプラインの概要“`と、素晴らしいCSS生成ツールである“`「Sass」の使い方“`について説明します。

###アセットパイプライン
Rails開発者の視点からは、“`アセットディレクトリ“`、“`マニフェストファイル“`、“`プリプロセッサエンジン“`という、3つの主要な機能が理解の対象となります。

#####アセットディレクトリ
“`app/assets“`: 現在のアプリケーション固有のアセット
“`lib/assets“`: あなたの開発チームによって作成されたライブラリ用のアセット
“`vendor/assets“`: サードパーティのアセット(デフォルトでは存在しません)

元記事を表示

railsチュートリアル第五章 パーシャル

####パーシャル
レイアウトのコードはその目的を果たしていますが、まだ“`少々散らかっている“`。
例えば、IE特有の風変わりな文法のHTML shimだけで3行も占有しています
これを“`隠せたら良い“`。
HTMLヘッダーは論理的な単位として分けられるため、“`一箇所にまとめた方が便利“`です。
Railsでは“`パーシャル(partial)という機能でこのような課題を解決“`

#####レイアウトにshimとheaderのパーシャルを追加する

“`html



<%= full_title(yield(:title)) %>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'rel

元記事を表示

KeyError: Trait not registered: “  ” referenced within  調べる→ナニコレ⇨全角を疑うこと

モデルのテスト作成中 

KeyError: Trait not registered: “  ” referenced within 調べても全然でてこない?????

“`
Failure/Error: @ostomy = build(:ostomy)

KeyError:
Trait not registered: “  ” referenced within “ostomy” definition
““

Ans全角が4つも入っていた。。。

全角入ってるんじゃないですかね?って考えられるのすごい。というか冷静に考えられるの素晴らし過ぎる

元記事を表示

【Rails】scaffoldについて

# はじめに
これまでの学習では

“`ruby
rails g model
rails g controller
“`

を使用し、モデル、コントローラーを作成していました。
rails tutorialを復習する中で、
scaffoldを再度使用したので、備忘録として。

# やったこと

いつもの上記コマンドを

“`ruby
rails g scaffold
“`

に置き換えて実行。

今回はUserモデルと関連するコントローラーなどを作成。

“`ruby
rails g scaffold User name:string email:string
“`

を実行。

そして作成されたファイルが

“`ruby
invoke active_record
create db/migrate/[作成日時]_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_te

元記事を表示

【devise】サインイン・サインアップ後マイページに遷移する方法

#deviseでサインイン・サインアップ後マイページに遷移する方法
###遷移先を指定する方法
サインインの際は`application_controller.rb`で、サインアップの際は`registrations_controller.rb`でコードを記述します。

“`application_controller.rb
class ApplicationController < ActionController::Base #サインイン後の遷移先を指定する方法 def after_sign_in_path_for(resource) ○○_path #遷移先のパス end end ``` ```registrations_controller.rb class Users::RegistrationsController < Devise::RegistrationsController #サインアップ後の遷移先を指定する方法 def after_sign_up_path_for(resource) ○○_path #遷移先のパス end

元記事を表示

Railsのroutesでネストさせる3つの方法

[1.はじめに](#1-はじめに)
[2.Railsのroutesにおける、namespace, scope, module](#2-内容い)
[3.まとめ](#3-内容ろ)

#1. はじめに
stack overflowで親切な人がネストの仕方を教えてくれたのでまとめます。
namespace以外でネストさせる方法を知らなかったので勉強になりました。
#2. Railsのroutesにおける、namespace, scope, module
**namespace**

“`Ruby
Rails.application.routes.draw do
namespace :admin do
resources :movies
end
end

“`
URLを“`admin/movies“`に変更したい。
同じくファイル構成も“`admin/moviesにしたい“`
(よくaoiモードでやるやつ“`api/v1/movies“`)

**scope**

“`Ruby
Rails.application.routes.draw do
scope

元記事を表示

【Ruby】RubyでCSV形式のデータを読みこみや書きこみをしたい時

# 概要
Rubyでcsvファイルを読み込んで新たに書き出せるようにしたかった。
Gemを利用しても実装できるが、あえてRubyのみで実装した。

# 手順
## 1.テストデータの取得
テスト用に郵便番号データの「東京」のcsvファイルでテストします。

### ◇郵便番号データ
https://www.post.japanpost.jp/zipcode/download.html

## 2.使用するライブラリ
CSV形式ファイルを使うには、標準ライブラリcsvを利用するのが便利です。
◇csvライブラリ
https://docs.ruby-lang.org/ja/latest/library/csv.html

今回、使用する`13TOKYO.csv`はShift-JISでエンコードされているため、その後の処理で不都合があるかもしれないので、`Shift-JIS`から`UTF-8`に変更します。
◇kconvライブラリ
https://docs.ruby-lang.org/ja/latest/library/kconv.html

## csvファイルを読み込んで別のcsvファイ

元記事を表示

非同期通信時 POSTではなくGET呼び出しになる

#はじめに
非同期通信を使用して、○○.js.erbを呼び出して、javascriptの処理を実行させるため、以下のように処理を書いた。
postメソッドを指定したが、なぜかgetメソッドで呼び出されてしまい、○○.js.erbではなく○○.html.erbが呼び出された。

“`erb:test.html.erb
<%= link_to "ボタン", hoge_path(1), id: "btn", method: :post, remote: true %>
“`

#解決方法
以下をapplication.htmlのヘッダーへ追加

“`
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
“`

“`erb:application.html.erb



hoge rails+gem rinkuで改行ありの自動リンク

# この記事の概要

– rails
– rinku( https://github.com/vmg/rinku )

上記で改行ありで投稿されたテキストのリンク部分を自動でリンク化

# gemのinstall

“`
gem ‘rinku’
“`

# 改行について

“`
<%= raw Rinku.auto_link(safe_join(@plan.description.split("\n"),tag(:br)) %>
“`

– scriptを含んでいたら嫌なのでhでエスケープ
– 自動エスケープ無しで出力したいのでraw。これがないと自動エスケープされてタグが見える形になる

“`
safe_join(@plan.description.split(“\n”),tag(:br)
“`

上記にしているのは単純にsimple_formatだと連続改行が反映されないため

# 別タブで開くようにする

“`
Rinku.auto_link(text, :all, ‘target=”_blank”‘)
“`

上記で別タブで開くようになる。それぞれ下記の意味。

元記事を表示

railsのsassでimage-urlを使用したら画像がぼやけた時の対応

# 事象
ローカル環境で検証していてsassで`image-url`を使っていて画像を指定したら何故かぼやけているような画像が表示された。業務のものなので画像とかは貼れないけど、文字部分が滲んでいるようなぼやけているような感じ。

今だとSPAが主流だし稀な事象だから参考になることはあまりないかもしれないけど、解決に少し詰まったので残しておく。

# 解決法
`image-url`ではなく`url`を使用すると解決した。

“`scss
#header {
background-image: url(‘/assets/images/hogehoge.png’)
}
“`

ちなみに原因は分からなかった。

違いがあるとすれば、自分のソースを見ても`image-url`はアセットプリコンパイルを使用するので、HTMLで指定されている画像のパスが変わるくらい。

だからといってアセットプリコンパイルしたことで画像がぼやけるかと言われたら微妙。。
もしわかる方がいたらコメントで教えていただけると嬉しいです。

元記事を表示

Rails ajaxでコメント機能などを実装した時にflashメッセージを消す方法

ajaxで実装すると、結構面倒になるのがflashメッセージの表示。
そしてそれ以前にredirect_toも効かないから面倒臭い。

まずredirect_toに関してだが、これは
render :js => “window.location = ‘/posts/#{@post.id}'”
このように記述することでajaxでも機能させることができる。

そしてflashメッセージの代入はいつも通り上記のリダイレクト処理をするよりも上の行に書いておく。
ここまでで、コメントを空で送信した時にフラッシュメッセージを表示することができる。

しかし問題は、次にコメントを正しく投稿した後もこのflashメッセージが残ってしまうということだ。
これを解決するにはcreate.js.erbで
$(‘#comment-error-explanation’).remove();
を記述することだ。(id属性はflashメッセージの部分に付与しておく)

以上の手順で実装完了。今回はたったこれだけに50分近く戸惑った。
おそらくこの記事はわかりづらいと思うので、コードの部分をコピペしてそのまま検索エン

元記事を表示

railsチュートリアル 第五章 BootstrapとカスタムCSS

####BootstrapとカスタムCSS
前章では多くのHTML要素にCSSクラスを関連付けました。
CSSベースでレイアウトを構成する際に高い柔軟性を与える。
ラスの多くは、Twitterが作成したフレームワークであるBootstrap特有のもの
Bootstrapを使うと、洗練されたWebデザインとユーザーインターフェイス要素を簡単に導入できるCSSフレームワークを
HTML5アプリケーションに追加できます。

この節では、サンプルアプリケーションにスタイルを追加するために、カスタムCSSルールとBootstrapを組み合わせて使う。

注目すべき点は、Bootstrapを使うことでアプリケーションを“`レスポンシブデザイン“`(Responsive Design) にできる

bootstrap-sass gemを使ってRailsアプリケーションに導入する。
####Gemfileにbootstrap-sassを追加

“`
source ‘https://rubygems.org’

gem ‘rails’, ‘6.0.3’
gem ‘bootstra

元記事を表示

完全無料でRailsアプリを公開する方法

初めて記事を書きます。
私が最近、Railsでサイト( [BountyHunter](https://bounty-hunter.ml/)という賞金切り口のコンテスト情報集めサイト )を公開しましたので、その構成やら苦労話をつづります。(宣伝も兼ねて)
なお、タイトルにも記載していますが、*無料で*公開することにこだわって作ったため、使い勝手は良いとは言えない点は許していただければと思います。

# なぜ無料にこだわっているのか
そもそも、私がプログラミング経験がないことから端を発しておりまして、Webアプリを作って継続的に育ててみたいと思ったところから、なんとなく身近で開発している人がいたRailsを選択し、まずは[Rails Tutorial](https://railstutorial.jp/)を勉強し始めました。

Rails TutorialではCloud9を開発環境として使うのですが、AWSの最小構成にしていても1年以上経過すると無料枠が使えなくなって有償になります(極少額ですが)。有償になると、クレジットカードに請求が来たりと家庭内でコソコソ勉強している身からすると面倒な

元記事を表示

N+1問題について!

N+1問題とは、、、?

初心者ならではの視点でわかりやすく書いていきたいと思います!

# ①.N+1問題の意味!

N+1問題とは、アソシエーションを利用した場合に限り!!

データベースへのアクセス回数が多くなってしまうと言う問題です!

これはアプリケーションのパフォーマンス低下に繋がります。。。

例えば!通常、コントローラーで  mail.allなどでデータを取得する際は、1度のアクセスで済みます!

しかし例のような、メールが複数存在する一覧画面に、それぞれユーザー名を表示するケースを考えてみます!

この場合、mailsに関連するusersの情報の取得に、メール数と同じ回数のアクセスが必要になってしまいます!

もしも1億メールあれば、1億回以上アクセスすることになり、アプリケーションのパフォーマンスが著しく下がることになるということです!

これを解決するために、includesメソッドを利用します!

# ②.includesメソッドの使用方法!

includesメソッドは、引数で指定された関連モデルを1度のアクセスでまとめて取得してくれます!

記述は、inc

元記事を表示

extend Activesupport::Concernについて

concernsに定義するモジュールでよく書かれているがいまいち何をしているのかよくわかっていなかったので調べました。

### 結論
単純に言えば、`モジュールでのクラスメソッドの定義やそれをincludeする側でクラスメソッドとして追加する方法、クラスレベルでのメソッド呼び出しの容易な方法を提供してくれるもの`だと理解しました。

### 具体例
具体例は以下のページと同じものです。
https://api.rubyonrails.org/v6.1.4/classes/ActiveSupport/Concern.html

例えば、モジュールがincludeされたときに特定の処理を呼び出したり、モジュールのメソッドをクラスメソッドとして追加したい時、通常以下のように書きます。

“`ruby
module M
# https://docs.ruby-lang.org/ja/latest/method/Module/i/included.html
def self.included(mod)
# includeする側(例えばクラス)の特異メソッドとしてClassM

元記事を表示

エラー:No route matches [GET] “/new_user_session_path”

##環境
MacOS BigSur Ver11.5.2
Ruby 3.0.2
Rails 6.1.4.1

##状況
Railsアプリを実装中、下記のエラー発生

“`
No route matches [GET] “/new_user_session_path”
“`

一見問題なさそう

“`app/views/layouts/_header.html.slim
li
= link_to ‘ログイン’, ‘new_user_session_path’
“`

pathを確認したけど間違ってない

“`
$ rails routes

new_user_password_path GET /users/password/new(.:format) devise/passwords#new

“`

##解決方法
#####原因:pathを””で囲っていた…
初歩的なミスすぎて自分で自分に引きました

“`app/views/layouts/_header.html.slim
li
= link_to ‘ログイン’, new_user_session

元記事を表示

Ruby on Ralis でデータベースにあるテーブルの中身を指定して取得してviewに表示する方法

データベースのテーブルの中身を指定して取得。

テーブル名:lists
カラム名:title

“`
def index
@lists = List.find_by(title:”リスト”)
@lists_number = List.find_by(number:46)
end
“`
あとはviewに記述すれば表示されます。

“`
<%= @lists.title %>
<%= @lists_number.title %>
“`

元記事を表示

OTHERカテゴリの最新記事