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

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

コントローラー内の処理のカテゴリー

#####自分でもあやふな部分があるので復習も兼ねて!

###まずコントローラーとは?

・リクエストに対する処理をする場所
・処理をした後クライアントにレスポンスとして返す場所

###コントローラー内での処理のカテゴリー

・コントローラー内での処理のカテゴリーをアクションと言います!
 基本的な7つのアクションが、、、
 
・index→一覧表示(トップページ)
・new→新規投稿ページ
・create→データの投稿
・show→個別詳細ページ
・edit→投稿編集ページ
・update→データの編集
・destroy→データの削除

例えば、クライアントからトップページが見たああああああい!!とリクエストが来た場合はコントローラー内のindexアクションが動きます!

トップページの表示がリクエストで来ていた場合の記述の仕方↓

“`rb
def index
end
“`

以上!!

                         

元記事を表示

【Ruby on Rails】バリデーションが効かなかったときの原因追求をした話

#対象者

* バリデーションを使っている方
* バリデーションが効かない不具合が発生している方

#目的

* バリデーションを使って投稿が失敗するようにすること

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

https://post-output.com/185/

上記記事を参考に実装

* Articleモデル(記事の投稿)、Tagモデル、ArticleTagモデル(中間テーブル)実装中
* title,bodyはArticleのカラム、tag_nameはTagのカラム

 下記のようにバリデーションを設定したが投稿ができてしまう、、、

““model/tag.rb
class Tag < ApplicationRecord has_many :articles, through: :article_tags has_many :article_tags validates :tag_name, presence: true end ``` ###2.結論(解決策) 下記のようにコントローラーを変更 before ```app/tags_control

元記事を表示

Rails enumの使い方

#enumとは
enumは列挙型でカラム(列)で文字列を順番に出力していくものです。

そしてそれぞれに数字を割り当てて意味を持たせます。

例えばある処理をして処理の流れを表現できます。

0が「未入力」、1が「入力中」、2が「処理中」、3が「処理済」
というように 処理の流れを表現できます。

⚫︎補足
Rubyにはenumはなくrails 4.1以降から導入されたみたいです。

#enumを使うと?

Enumを使うことにより数値で修正が簡単になり、module側で変更するだけで
全体に変更が反映されます。
意味を持った文字を入れて、DB は数字で管理し保存しておくことができます。
そして値を決めることによって不正なアクセスが入らないようにします。

データベースの中身が見れるschema.rbで見てみましょう。

“`schema.rb

ActiveRecord::Schema.define(version: 2021_01_17_095549) do

create_table “staffs”, fcharset: “utf8”, force: :cascade

元記事を表示

Rails enumの使い方

#enumとは
enumは列挙型でカラム(列)で文字列を順番に出力していくものです。

そしてそれぞれに数字を割り当てて意味を持たせます。

例えばある処理をして処理の流れを表現できます。

0が「未入力」、1が「入力中」、2が「処理中」、3が「処理済」
というように 処理の流れを表現できます。

⚫︎補足
Rubyにはenumはなくrails 4.1以降から導入されたみたいです。

#enumを使うと?

Enumを使うことにより数値で修正が簡単になり、module側で変更するだけで
全体に変更が反映されます。
意味を持った文字を入れて、DB は数字で管理し保存しておくことができます。
そして値を決めることによって不正なアクセスが入らないようにします。

データベースの中身が見れるschema.rbで見てみましょう。

“`schema.rb

ActiveRecord::Schema.define(version: 2021_01_17_095549) do

create_table “staffs”, fcharset: “utf8”, force: :cascade

元記事を表示

rails assets:precompile RAILS_ENV=productionでエラー

本番環境へのデプロイ時に
rails assets:precompile RAILS_ENV=production
を実行すると、

Compiling…
Compilation failed:
Though the “loose” option was set to “false” in your @babel/preset-env config, it will not be used for @babel/plugin-proposal-private-property-in-object since the “loose” mode option was set to “true” for @babel/plugin-proposal-class-properties.
The “loose” option must be the same for @babel/plugin-proposal-class-properties, @babel/plugin-proposal-private-methods and @babel/plugin-proposal-priva

元記事を表示

railsチュートリアル第4章 CSS

####CSS、再び

“`css
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
“`
Railsではスタイルシートを追加するための特別なメソッドを使っています。

“`css
stylesheet_link_tag ‘application’, media: ‘all’,
‘data-turbolinks-track’: ‘reload’
“`
このメソッドを呼んでいます
第一に、丸カッコがありません。
“` Ruby では丸カッコは使用してもしなくてもいい。“`

次の2つの行は等価です。

“`rb
# メソッド呼び出しの丸カッコは省略可能。
stylesheet_link_tag(‘application’, media: ‘all’,

元記事を表示

railsチュートリアル第4章 ブロック

####ブロック
配列と範囲はいずれも、ブロックを伴うさまざまなメソッドに対して使える。

“`rb
>> (1..5).each { |i| puts 2 * i }
2
4
6
8
10
=> 1..5
“`
(1..5)に対してeachメソッドを呼び出す。
メソッドに渡されている{ |i| puts 2 * i }が、ブロックと呼ばれる部分
|i|では変数名が縦棒「|」に囲まれている。 ブロック変数に対して使うRubyの構文
範囲オブジェクトのeachメソッドは、iという1つのローカル変数を使ってブロックを操作

“`rb
>> (1..5).each do |i|
?> puts 2 * i
>> end
2
4
6
8
10
=> 1..5
“`
短い1行のブロックには波カッコを使う。
長い1行や複数行のブロックにはdo..end記法
iの代わりにnumberを使っている。
この変数(ブロック変数)の名前は固定されていません。

“`rb
>> 3.times { puts “Betelgeuse!” } # 3.timesではブロックに変数を使っていない

元記事を表示

railsチュートリアル7章進めたときの覚書

##この章では何するの?
ユーザー登録機能を追加するよ
HTML フォームを使ってWebアプリケーションに登録情報を送信
ユーザーを新規作成して情報をデータベースに保存
作成されたユーザーの新しいプロフィールを表示できるようにするために、ユーザーを表示するためのページを作成

ユーザー用のRESTアーキテクチャを実装する第一歩を踏み出すよ

##サイトにdebug情報の追加
ビルトインの `debug`メソッドと`params`変数を使い、デバッグ用の情報が表示されるようになる。

“`
<%= debug(params) if Rails.env.development? %>
“`

開発環境だけでdebug情報を出力したいときは下記コード追加。

“`
if Rails.env.development?
“`

logサンプル

“`
— !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
contr

元記事を表示

[Ajax]フォロー機能を非同期にした

# はじめに
本記事では、フォロー機能を非同期通信にした方法を記述します。

以前にいいね機能について、非同期通信にした記事も投稿しておりますので、
ご参照ください。

https://qiita.com/mkato1013/items/9ee39a7675371aa585ce

## 前提
フォロー機能が同期通信できているものとします。

# コード
早速ですが、該当箇所のコードを記載します。

## コントローラー
showページにフォローボタンやフォロワーを確認できるボタンがあります。
後述のモデルに合わせて`followings`や“followers`メソッドを作成します。

また、`users`と`followers`などに分けている方もいらっしゃいましたが、
私は、`followings`や“followers`に分けた方がわかりやすいと思ったため、こうしています。

“`users_controller.rb
class UsersController < ApplicationController def show @user = User.fin

元記事を表示

Fakerを利用したダミーモデルの作り方

# Fakerとは
ダミーデータを生成してくれるgem。
様々な種類が用意されている。

# seeds.rbとは
テーブルにデータを作成するファイル。ここにダミーデータを生成するコードを書く

# 導入方法
Gemfileに以下を記述してbundle install

“`ruby@:Gemfile
gem ‘faker’
“`
“`zsh
$ bundle install
“`

例えばusersテーブルに10件、Boardテーブルに20件のダミーデータを追加したい場合。

“`ruby:app/db/seeds.rb
10.times do
User.create!(
last_name: Faker::Name.unique.last_name,
first_name: Faker::Name.unique.first_name,
email: Faker::Internet.unique.email,
password: “12345678”,
password_confirmation: “12345678”
)
e

元記事を表示

railsのbutton_toメソットにfont Awesomeを適用する方法

#はじめに
railsでポートフォリオを作っていて、計画していた機能要件が一通り終わったので、少しデザインを整えてみようということになりました。
手始めにイイねボタンを整えようと思い、Font Awesomeを使うことにしました。
Font AwesomeはCSSでウェブアイコンを簡単に導入できるツールです。

##Font Awesomeをhtmlファイルで使う方法
Font Awesomeを使う下準備です。

“`html

“`
headタグにこのように記述します。
hamlファイルで使うときは手順が異なるようなので、こちらの方の記事をご参照ください。

https://qiita.com/koki_73/items/fa6d31a3b54a84d19dcf

##button_toメソッドに適用する
まず、Font Awesomeのホームページに行き、使いたいアイコンを探

元記事を表示

rails で `development?` を維持したまま新しい環境を追加したいとき

新しく環境を追加したい場合(`staging` とか)はこちらの方法でできるけど、
https://qiita.com/yusabana/items/a1f4fe2c37b20db2a3f6

`Rails.env.development?` とか `Rails.env.staging?` は `method_missing` で実装されてるので、
https://github.com/rails/rails/blob/v6.1.4/activesupport/lib/active_support/string_inquirer.rb#L28

例えば `development` と同等の環境を新しく `development-foo-bar` みたいに追加しようとしても、
`Rails.env.development-foo-bar?` とかやるとメソッド名にハイフンが使えないので syntax error になるし、
肝心の `Rails.env.development?` が `false` のままになってしまうので想定通りにいかない。

ので、こんな感じで `extend` し

元記事を表示

送信中の暗号化をtrueにしたredisにsidekiqから接続する

## 前提
sidekiqを導入するにあたり、privateネットワーク内ではあるがアプリとredis間の通信を暗号化しようとなった。
それにあたりredisへの接続ができない問題に当たったのでその修正を覚書

※ redisにはElastiCache for redisを利用

## 結果

以下のように設定した上で以下を環境変数から注入

“`
REDIS_URL=rediss://aaa.aaa.aaa.0000.apne1.cache.amazonaws.com:6379
REDIS_AUTH_TOKEN=****
“`

“`rb
# config/initializers/sidekiq.rb
Sidekiq.configure_client do |config|
config.redis = {
url: ENV.fetch(“REDIS_URL”) { “redis://127.0.0.1:6379” },
password: ENV.fetch(“REDIS_AUTH_TOKEN”) { nil },
}
end

Sidekiq.co

元記事を表示

[Html/Rails]画像の大きさを調整をしたい

##初めに
####この記事の対象者
・画像を貼ったのはいいけど、大きすぎて/小さすぎてなんか見にくい。。。ヒト用

####環境
・Macbook Air (Retina, 13-inch,2019)
・プロセッサ 1.6GHz デュアルコアIntel Core i5
・メモリ 8GB 2133 Mhz LPDDR3
・MacOS Big Sur バージョン 11.5.2

####記事の目次
**1)cssを使って画像の大きさを変える方法**
**2)rubyを使って画像の大きさを変える方法**
**3)画面の大きさに応じて画像の大きさを変える方法**
**4)最後に**

##cssを使って画像の大きさを変える方法**
####1)html内に画像を添付

“`

“`

####2)cssで画像のクラス名を指定して横幅、縦幅を設定

“`
.sample{
width:50px;
height: 50px;
}
“`

##rubyを使って画像の大きさを

元記事を表示

(正常系)Rspec Userモデルの単体テストの手順

雛形
======
[前回の続きの雛形](https://qiita.com/wwaattaa/items/03f31bdad4b12a80ccb4)を使用して
Userモデルの正常系テストについて書いていきます。 
ここではバリデーションに関するテストを実装致します。

*正常系テスト*とは、
ユーザーが開発者の意図する操作を行った時の挙動を確認するテストコードです。

↓spec/models/user_spec.rb

“`

require ‘rails_helper’
describe User do
before do
@user = FactoryBot.build(:user)
end

describe ‘ユーザー新規登録’ do
context ‘新規登録がうまくいくとき’ do
it “nicknameとemail、passwordとpassword_confirmationが存在すれば登録できる” do
end
it “nicknameが6文字以下で登録できる” do

元記事を表示

【RSpec】結合テストコードでセレクト要素を取得する

# はじめに
今回は下記の画像のようにセレクト形式のフォームのテストコードの際にセレクト要素を取得する方法について記述します。

![スクリーンショット 2021-09-07 17.46.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623096/4de6b903-a603-2e1e-bb9a-a9996e8c0d48.png)

上記の画像であれば生年月日や居住地の入力欄がセレクト形式に当てはまります!

# 開発環境
Ruby on Rails バージョン2.6.5

# セレクト要素を取得する方法

私は当初、下記のように”fill_in”を使って取得するのかと思い苦戦しておりました。

![スクリーンショット 2021-08-24 10.06.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1623096/15d71f96-6f5b-f660-5e0e-a1e4c9d2f273.png)

しかし、セ

元記事を表示

No route matches [GET] “/logout”の解決

誤り等ありましたらご指摘ください
##前提
-Rails 6.1.4
-ruby 2.6.8

##問題

rails tutorial 8章を学習中、ログアウト機能を追加したので試してみた所、下記エラーが発生。

“`
No route matches [GET] “/logout”
“`
調べても「jQueryがない!」と言った記事が多く、チュートリアルでは過程でインストールしている為、解決の糸口は見つからず、丸二日悩みに悩んで見つけたのが、”link_to”を”button_to”に置き換える事だった。

“`ruby:_header.html.rb
<%= link_to "Log out", logout_path, method: :delete %>
“`

“`ruby:_header.html.rb
<%= button_to "Log out", logout_path, method: :delete %>
“`

しかしこれではデザインが崩れてしまい、私の意に反する。

##解決
これを

“`ruby:app/javascript/packs/

元記事を表示

【Rails】includesメソッドと部分テンプレートを繰り返しrenderにする事によってN+1問題を回避する

# N+1問題とは?
SQLが必要以上に実行されてしまいパフォーマンスが落ちる問題のことです。
それぞれのモデルに

“`ruby
(Userモデル) has_many :boards
(Boardモデル)belongs_to :user
“`
といった定義を施すことで、関係性を定義することができます。

N+1問題はアソシエーション有りの時に生じる問題であり、上記の例で言うと掲示板の一覧を表示する際にユーザーの名前を取得するために掲示板の数だけSQLが発行されてしまいます。

具体的には次のようなコードになります。

“`ruby:app/controllers/boards_controller.rb
class BoardsControllere < ApplicationController def index @boards = Board.all end end ``` ```ruby:app/views/boards/index.html.erb <% @boards.each do |board| %>
<%= render partial:

元記事を表示

Railsのredirect_toで直前のページに戻りたい

“`ruby
redirect_back(fallback_location: root_path)
“`
で直前のページに遷移します。

元記事を表示

[Rails]render(部分テンプレート)について

##初めに
####記事の対象
・フロントサイドで同じプログラムを何度も書きたくないヒト用

####環境
・Macbook Air (Retina, 13-inch,2019)
・プロセッサ 1.6GHz デュアルコアIntel Core i5
・メモリ 8GB 2133 Mhz LPDDR3
・MacOS Big Sur バージョン 11.5.2

####記事の目次
1)renderってなんだ?
2)部分テンプレートの使い方
3)部分テンプレートの場所によってrenderの仕方が違う

##renderってなんだ?
####イメージは、別の場所にプログラムを配置して、使いたい場所に移す。
####フロントサイドでどのページへ遷移しても同じ見た目があるようなところに使います。(例えばqittaの上の部分と下の部分)

![rendersample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1102030/61bce9f8-8e7f-42b4-b0f4-bc0a52b48880.png)

##部

元記事を表示

OTHERカテゴリの最新記事