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

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

rails5 progate 整理メモ いいねボタン

# 「いいね!取り消し」ボタンを作ろう
likesコントローラにdestroyアクションを作成、@current_user.idとparams[:post_id]をもとに削除する。
“`いいね済み“`にリンクをつけてアクションをつける。
## ルーティングを設定
“`routes.rb
.
.
.
post “likes/:post_id/destroy” => “likes#destroy”
.
.
.
“`
これでurlを入力すると“`destroy“`アクションが動くようにする。

## destroyアクションがどのような内容かを設定する
“`likes_controller.rb
.
.
.
def destroy
@like = Like.find_by(user_id: @current_user, post_id: params[:post_id])
@like.destroy
redirect_to(“/posts/#{params[:post_id]”)
end
.
.
.
“`
## 投稿の詳細ページに“`like

元記事を表示

rails ページネーションの実装

### 1、gem kaminariをインストール
“`
gem ‘kaminari’
“`
としbundle installで完了。

### 2、デフォルトの設定をいじる

“`
rails g kaminari:config
“`
コマンドでページネーションの設定を書き込むファイルを作成。

“`kaminari_config.rb
# frozen_string_literal: true

Kaminari.configure do |config|
# config.default_per_page = 25
# config.max_per_page = nil
# config.window = 4
# config.outer_window = 0
# config.left = 0
# config.right = 0
# config.page_method_name = :page
# config.param_name = :page
# config.max_pages = nil
# config.para

元記事を表示

Railsでtodoアプリを作った

# 下準備

まずはファイルを作成する
“`
rails new rails-todo
“`
でファイル作成。その後
“`
cd rails-todo
“`
で目的のディレクトリに移動
# Modelを作成
“`
rails g model Task title:string
“`
でstring型のtitleというカラム名を持ったTaskテーブルというモデルを作成した。
このままではデータベースに反映されていないので
“`
rake db:migrate
“`
でデータベースに反映させる。
# Controllerを作成する
“`
rails g controller Tasks
“`
でコントローラーを作成。コントローラーは基本複数形であることに注意。
次に作成されたコントローラーにアクションを追加。/tasksにアクセスした際のアクションを追加。Task.allで全タスクを取得。
“`ruby:app/controller/tasks_controller.rb
class TasksController < ApplicationController

元記事を表示

【Rails】seedの使い方

mac OS バージョン11.6
エディタ…VScode
Rails 6.0.4

テストデータを作るとマイグレーションファイルをresetした時にすぐにデータを呼び戻せる→開発がよりスムーズにいくとのことなので、Railsで用意されているシーディングを学んでいきます。

railsではseedファイルに入れておきたいデータを“`db/seeds.rb“`に記述していきます。

“`seeds.rb
Movie.create!(
title:’存在のない子供たち’,
image:File.open(‘./app/assets/images/1015706_03.jpeg’),
released_year:’2019′,
country:’レバノン’,
screening_time:’125′,
synposis:’中東の貧民窟で暮らす12歳のゼインは、貧しい両親が出生届を提出していないため、IDを持っていない。ある日、ゼインが仲良くしていた妹が、知り合いの年上の男性と強制的に結婚させられてしまい、、、’,
genre:’ドラマ’,
release

元記事を表示

インフラエンジニアがTECHCAMPを受講してみた感想

## 受講時の筆者のスペック
– インフラエンジニアとして、SIerに10年勤務
– ネットワークやサーバなどオンプレミスのインフラ設計・構築・運用が得意
– プログラミングスキル
– 新人研修時にJavaを2週間程度学び、オブジェクト指向が何かくらいは何となく理解している
– 実務では、インフラの保守や自動化の一環で100STEP程度のShellやPerlを作成するくらい
– 変数や配列、辞書型、制御文などプログラミングの基礎的な概念は理解しているがアプリケーション開発の経験は無し
– レベル的には、おそらくこのサイトで定義されている[プログラマレベル](https://www.geekpage.jp/blog/?id=2007/7/9)で言うところのレベル2~3の中間くらい

## 受講時期とコース
– 時期:2019年の12月~翌年1月
– コース:10日間の集中コース(TECHCAMP イナズマ)
– 受講料は、当時18万円程度だったと思います(うろ覚えですが、、)
– このコースは就職までをサポートするコースではなく、あくまでプロ

元記事を表示

【Rails】sidekiqでログを出力するための方法を、公式リファレンスから理解する

# 概要
Docker環境で、sidekiqログをローカルで見ようとしたらやり方がわからなかったので備忘録として残します。

# 内容
[公式リファレンス](https://github.com/mperham/sidekiq/wiki/Logging)を参考にしながら進めます。
早速実際の様子です。

“`
class YourWorker
include Sidekiq::Worker

def perform(*args)
logger.info “Things are happening.”
logger.debug { “My args: #{args.inspect}” }
end
end
“`

## logeer.infoを利用する
def perform以下を見てください。logger.info/debugと記載されています。

このlogger.〇〇(ログレベルが入ります)の後ろに、出力したい変数やエラーメッセージなどを指定します。

もう少し例を具体的にみてみましょう。
例えば、事前に処理した変数をsidekiq側に送れているかどう

元記事を表示

Capybara で select2 項目を選択する

[select2](https://select2.org/) のテストについて
Capybara で、ある項目を選択したい時のメモ

普通の select と同じようにやると上手くいかない

“`ruby
select([option 名], from: [label 名])
=>
Capybara::ElementNotFound:
Unable to find select box [label 名] that is not disabled and Unable to find input box with datalist completion [label 名] that is not disabled
“`

タグ構造が変わっているから :thinking: ?

[同じように質問している人がいる](https://stackoverflow.com/questions/41257506/how-to-use-capybara-to-select-a-select2-drop-down-field)
へー、[Gem](https://github.com/Hiru

元記事を表示

単体テスト用に ActionView::Helpers::FormBuilder オブジェクトを生成する

# 方法

“`rb
class DummyFormBuilder < ActionView::Helpers::FormBuilder # 引数に Active Record を渡す前提。 def initialize(model_object) object_name = model_object.model_name.param_key template = ActionView::Base.empty options = {} super(object_name, model_object, template, options) end end ``` ```rb # user #=> #
# user.model_name.param_key #=> “user”
let!(:f) { DummyFormBuilder.new(user) }
“`

# バージョン情報

– Ruby 2.7

元記事を表示

rails5 progate 整理メモ いいねボタン

# いいね機能の仕組み
どのユーザーがどの投稿にいいねしたか」をデータとして管理するのがいいね機能。
まずはデータを保存するために、データベースにlikesテーブルを作成する。

## likesテーブル
「user_id」と「post_id」2つのカラムを持つlikesテーブルを用意

## likeテーブルを作成
Likeモデルとマイグレーションファイルを用意しましょう。
likesテーブルにはuser_idとpost_idの2つのデータを持たせるようにしてください。
“`
rails g model Like user_id:integer post_id:intger
“`
## 許可されていないコマンドです
“`
rails g model Like user_id:integer post_id:integer
“`
integerの“`e“`が抜けていた。

likeモデルが作成されていた。

マイグレーションファイルを作成するとこれを行う。
“`
rails db:migrate
“`
user_idとpost_idのバリデーションを設定
“`rb

元記事を表示

Railsの画像まわりのライブラリについて整理する(ActiveStorage, ImageMagick, ImageProcessing,,,)

## はじめに
Railsで画像を扱う方法はいくつかパターンがあり、それぞれ利用するGemやライブラリが違います。
ActiveStorage、CarrierWave、Shrine、refile、ImageMagick、ImageProcessing、MiniMagick、RMagick、libvips。。。
この辺の用語を自分の中で整理したいと思います。

:::note
環境
Mac OS Catalina 10.15.7
ruby 2.6.5
Rails 6.0.5
:::

***今はActiveStorageというものがRailsに元から入っているので、これを使うことは前提とします。***
必ずしもActiveStorageを使うべきということはないと思います。
例えばバリデーション機能がないことや、エラー時のキャッシュの仕組みがありません。(2022/5現在)
現時点でバリデーションをするためにはactive_storage_validationsやactivestorage-validator等のgemを導入することになるでしょう。

ActiveStorageは以下のコ

元記事を表示

includesを使用したN+1問題の対処

N+1問題の対処をした際の内容を記事にしてみました。

## どのようなN+1問題だったのか
私が陥ったN+1問題は、userがlike(いいね)したpost(投稿)に対するlike(いいね)の一覧を表示する際におきたもので、結果としてこの問題はループ内で関連したテーブルで起きているものだったので、`includes`を使用して対処したというのがこの記事に内容になります。

## N+1問題について
参考記事:[【Ruby on Rails】N+1問題ってなんだ?](https://qiita.com/massaaaaan/items/4eb770f20e636f7a1361)
1+Nの方がイメージし易かったのですが、ループ処理の中で都度SQLを発行してしまい
大量のSQLが発行されてパフォーマンスが低下してしまう問題のことで、
例えるなら、スーパーで商品を1点ずつ会計するイメージで、それだけ無駄な状態みたいです。
上記の記事からの引用ですが、説明がとても分かりやすいです。

## どう対処すればいいのか
要するに主キーが設定されているテーブルにアクセスする際に、
関連するテーブルのレ

元記事を表示

rails5 progate 整理メモ 投稿者権限

# 投稿者だけが編集できるようにしよう(1)
他のユーザーが編集できないようにする
## 投稿者だけが“`編集“`,“`削除“`をできるようにする
“`@post.userのid“`と、“`@current_userのid“`を比較し、等しい場合にのみ編集・削除リンクを表示するようにする。
“`html
<% if @post.user_id == @current_user.id %>

<%= link_to("編集", "/posts/#{@post.id}/edit") %>
<%= link_to("削除", "/posts/#{@post.id}/destroy", {method: "post"}) %>


<% end %>
“`
“`@current_user“`は“`application_contr

元記事を表示

【Rails】新規アプリケーション作成までの流れ(確認方法もご紹介)

新規アプリケーション作成時の流れと、その作業がしっかり完了しているのか確認する手順も踏まえてご紹介いたします。

### はじめに

指定したフォルダ内にアプリケーションを格納したい場合は予めフォルダを作成しておく。
(例 projects、Macの場合は「Finder」)

→ 新規アプリケーション作成前にターミナルでそのディレクトリ(フォルダ)に移動しておきましょう。

projectsディレクトリの場合
“`
cd projects
“`

## 1 新規アプリケーション作成

##### ①新規アプリケーション作成コマンドを実行(ターミナル)
“`
rails _6.0.0_ new アプリ名 -d mysql
“`

##### ②作成した以下のファイル内を変更(コードエディタ)
14行目くらいにある encoding: utf8mb4 を encoding: utf8 に変更

config/database.yml
“`
default: &default
adapter: mysql2
encoding: utf8 #こちらの記述に変

元記事を表示

rails5 progate 整理メモ 投稿の一覧を表示する

# 投稿一覧にもユーザー情報を表示しよう
“`html
“>
.
.
.
“>
“`
で成功した。
ところで
# “”で2重に囲む理由とはなんなのか?
外側の“`””“`で文字列として扱うのだからいいじゃないか。

srcはパスを表すために””で囲んで文字列にするのはわかる。
ではなぜ
“`<%= %>“`で囲む時も””を囲んで文字列にするのか?わからない。

## “`<%= %>“`とは何か
“`<%= %>“`はrubyの文を実行するためのタグ
## 答えは出なかった。
しかし推測ならできた。
“`<%= %>“`で囲む理由は#{}の式展開(ruby)を使うため。
“`<%= %>“`の中で“`””“`で囲む理由は式展開が“`””“`で囲まれないとただの文字列として扱われてしまうため。
以上のより
“`””“`を2重で囲む必要

元記事を表示

JavascriptからActionTextに値を設定/取得する方法

# 概要
モーダルで入力させてその内容を書き戻すことをしたくて、jsを使用して値の設定/取得をおこなったのでその備忘録です。

# コード
jsでActionTextに初期値を設定する
`$(‘trix-editor’).val(rich_text.body);`

jsでActionTextから入力値を取得する
` $modal_fields.find(‘trix-editor’).text()`
タグ含めて取得できないので↓の方が良い(contentはActionTextで表示するフィールド名)
` $modal_fields.find(‘input[name=”content”]’).val()`

元記事を表示

Rails関連で記事にするほどじゃないけど、まとめておきたいものを列挙する感じの記事です

## ルーティング

ルーティングは、ブラウザから届いたリクエスト(HTTPメソッド+URL)に対して、コントローラーで定義したアク

ションを

結びつける仕組み。

Ruby on Railsではroutes.rbというファイルにルーティングに関するコードを書いていくことでルーティングを

実現させることができる。

MVCモデルと密接に関係していて、よく使うのでどういう特徴があるのかきちんと理解しておくべきです。

## モデル

Railsにおけるモデルとは、簡単に言うとデータベースにアクセスする為の機能を持ったクラス(オブジ

ェクト)のことを言います。

コントローラーの命令に従って、データベースから何らかの情報を取り出したり、あるいはデータベース

に何らかの情報を書き込んだりするのがモデルの主な仕事です。要はデータベースとの橋渡し役ですね。

## gemの追加をしたらbundle install

これはよく忘れるので繰り返し覚えましょう。gemfileにテキストエディタで追加して、ターミナルで

bundle installで

元記事を表示

非同期でNo route mach Get…

## 備忘録で書きます。

いいいね機能実装し、jQueryで非同期処理を行いました。
最初はエラーも出ず順調順調でしたが、、、

## jQueyで非同期が完了した後のこと…

### javascriptファイルを独自に作成

application.jsに
“`
:
import “jQuery”;

import “sample.js”;
:
“`
のような形で記述していました。

jqueryと独自のjavascriptファイルが何やら邪魔をしていたようで一旦、import”sample.js”の記述を削除しました。

すると、エラーも出ずに元どおりになりました。

まだ個人的な問題は解決せずつまずいていますが、Turbolinks関連や、htmlのレスポンスの詳細などに加えて、Webpack関連も少ししれたのでもっと勉強していきたいと思います。

下記の記事を教えて頂いた@mochi_yu2さん。本当にありがとうございます。

参考
https://qiita.com/fujishiro380/items/12e39ec85f162ce6b3c8
https://

元記事を表示

Nuxt.js x Ruby on Rails で画像ファイルを含む内容を保存させるときにやること

## [はじめに](#-はじめに)
フロントエンドにNuxt.js、バックエンドにRails APIモードでの画像ファイルを含む内容を保存させるときにやることの記事です。
Nuxt.js、Railsはそれぞれ構築済みであることとします。

## [必要なもの](#-必要なもの)
`gem carrierwave`

## [実装方法](#-実装方法)
### Rails
1. Gemfileに`carrierwave`を追記しターミナルで`bundle install`します。
“`Ruby:Gemfile
…途中省略
gem ‘carrierwave’, ‘~> 2.0’
“`

“`Ruby:ターミナル
bundle install
“`
2. アップローダークラスの生成
ターミナルで下記コマンドを実行してアップローダークラスを生成します。
“`ruby:ターミナル
bundle exec rails g uploader アップローダー名(大文字始まり)
“`
実行すると、`/app/uploaders/アップローダー名_uploader.rb`が生成されます。

元記事を表示

return、 break、nextの違い

「フォームから入力された値が不正だった場合にエラーメッセージを表示しよう」というメソッドの中で、「もし、このケースであればすぐに次の処理に移りたい」というときその行で「return」させてみたのですがそれだとメソッド自体から離脱してしまい次の行の処理ができなくなってしまったので別の方法を探してみました。

## return

その時のコードはこのような形

“`ruby
def hoge
error_messages = []
CSV.parse(tsv_text, headers: true, col_sep: “\t”) do |row|
error_messages << "shop_id:#{row["shop_id"]}は存在しないIDです" if Shop.find_by(id: row["shop_id"]).blank? error_messages << "user_id:#{row["user_id"]}は存在しないIDです" if User.find_by(id: row["user_id"]).blank? error_mes

元記事を表示

Stimulus 別コントローラーのアクションを呼びたい

“`slim
div[data-controller=”hoge fuga”]
button data-action=”fuga#fugaAction”
“`

“`js:app/javascript/controllers/hoge.js
import { Controller } from “@hotwired/stimulus”

// Connects to data-controller=”hoge”
export default class extends Controller {
initialize() {
this.element[this.identifier] = this 👈これが重要
}

hogeAction() {}
}
“`

“`js:app/javascript/controllers/fuga.js
import { Controller } from “@hotwired/stimulus”

// Connects to data-controller=”fuga”
export default class e

元記事を表示

OTHERカテゴリの最新記事