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

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

【Rails】orderメソッドが効かないとき

1対多のアソシエーションがある場合の並び替えで躓いたのでメモφ(´・ω・`)メモメモ

今回は、記事に対するコメントを新着順で並び替えです。

まず、新着順にするために下記のように、
コントローラーにorder(created_at: :desc)を追記しました。
しかし、並び替えされず・・・

“`
app/controllers/post_controller.rb

def show
~省略~
@comment = Comment.new
@comments = @post.comments.order(created_at: :desc)
end
“`

解決方法
—-

**1) postモデルに-> { order(created_at: :desc) }を追加**
※dependent: :destroyの前に置くとエラーになりました。
“`
app/models/post.rb

class Post < ApplicationRecord belongs_to :user has_many :comments, -> { order(

元記事を表示

railsにjqueryを導入し、外部ファイルから読み込む時

yarn add jquery

config/webpack/environment.jsに下記を記述。

const webpack = require(‘webpack’)
environment.plugins.prepend(‘Provide’,
new webpack.ProvidePlugin({
$: ‘jquery/src/jquery’,
jQuery: ‘jquery/src/jquery’
})
)

app/javascript/packs/application.jsに下記を記述。
require(“jquery”)

これでscriptタグから作るjqueryの動作は作れる。

ただ外部ファイルに分けて動作をさせたい場合は、
app/javascriptの直下に任意のファイル(〇〇.js)を作り、
app/javascript/packs/application.jsに下記を記述。
require(“〇〇”)

元記事を表示

【Rails】ユーザー通報機能を作ってみました

ポートフォリオを作っていた際にwebアプリケーションでよく見かけるユーザー通報機能を実装したいと思い、実装の仕組みを検索してみたのですがほとんどヒントを見つけられませんでした。
なので、自己流でユーザー通報機能を実装してみました。まだまだ初心者のため、諸々間違いがあるかもしれませんが、この記事が少しでも皆さんの助けになると幸いです。(何かお気づきのことがあればコメントお願いいたします> <) ### 【環境】 - Rails 6.1.5.1 - ruby 2.6.3 ### 【前提】 - 管理者機能(Admin)を実装しています! - deviseを使っています! ### 【実現したいこと】 - 自分以外のユーザーを通報できる機能。 - 通報されたユーザーを管理者が確認できる。 - その通報のステータス(対応済み等)を更新できる。 - 管理者の判断でユーザーを退会扱いとする事ができる。そのユーザーはログインできなくなる。 ### 【テーブル設計】 | User | Report | | ---- | ---- | | name | reporter_id | | em

元記事を表示

【heroku】NameError: uninitialized constant Rack::MiniProfiler、Day11

本日Herokuへアプリの試作版をデプロイしました。その際に「Precompiling assets failed.」とエラーが出たので、その原因と解決方法について紹介します。

# 概要
“`:ターミナル
git push heroku master
“`
ターミナルにて上記コマンドを実行すると、
エラーが出ます。
“`
Precompiling assets failed.
!
! Push rejected, failed to compile Ruby app.
! Push failed
“`
コンパイルがうまくいかないために、Herokuへのデプロイがうまくいかないようです。では、具体的にどの部分のコンパイルがうまくいっていないのか特定する必要があります。ターミナルの記述を遡って、どこにエラーが出ているのか確認します。
# 原因
ターミナルの記述を遡ると、errorらしき部分を見つけました。
“`
Detecting rake tasks
—–> Preparing app for Rails asset p

元記事を表示

複合テストコードのまとめ

## はじめに
初心者なりにまとめたものになりますので、諸先輩方からは何書いてんだおめえと感じる部分があると思います。
そう感じた際は、お手数ですが、コメント頂けると幸いです。

内容は、自分がテストコードを書く際に使用した物の構成になります。

## 目次
– visit
– expect

– マッチャ(matcher)とは
-include
-eq
-have_content
-have_no_content
-have_selector
-have_link
-change

– find().click
– find().hover
– fill_in

## visit
リクエストを送り、指定されたページへ遷移するためのコード
下のように記述することで、prefixにルーティングされているpathのビュー先へ遷移する

visit tweets_path
visit 「prefixのパス」_path

## expect
「アプリの実際の挙動」と「製作者が想定している挙動」が一致するかどうかを判断する記述
マッチャ(matcher)と呼ばれる検証する条件

元記事を表示

accepts_nested_attributes_forを使ったデータ生成でハマった話

accepts_nested_attributes_for でデータ保存をする際、テーブル同士が1対1なのか1対多なのかで書き方が違うらしい

# 1対1の場合
“`ruby
params = { member: { name: ‘Jack’, avatar_attributes: { icon: ‘smiling’ } } }
member = Member.create(params[:member])
“`
createに渡すデータはハッシュを渡し、その中のavatar_attributesはハッシュのデータ。

# 1対多の場合
“`ruby
params = { member: {
name: ‘joe’, posts_attributes: [
{ title: ‘Kari, the awesome Ruby documentation browser!’ },
{ title: ‘The egalitarian assumption of the modern citizen’ },
{ title: ”, _destroy: ‘1’

元記事を表示

【Rails】指定日の投稿数を非同期通信化にて表示!

##### ★先駆者様の記事を見ながら真似して実装してみました!↗︎
皆さんもぜひ参考にして下さい(^。^)σ

https://qiita.com/nao0725/items/3ce5512500b38ea75431

なんですが、、、
真似しても中々実装できず、とても苦労したので、復習も兼ねてまとめてみます。
語彙力、コミュ力なしの期待値なし人材が書くので、耳にポテチ挟みながら見て下さいm(_ _)m

#### 〜完成イメージ〜
何も入力してない時は、「年/月/日」が入る!
![スクリーンショット 2022-06-26 18.50.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2717077/e1e05359-1605-0955-fd51-545579e1d521.png)
日付指定後、検索ボタンを押すと、すると、、、
検索結果(投降数OTZ)が一瞬で出てくる(非同期通信すげぇ!!!)
![スクリーンショット 2022-06-26 18.50.13.png](https://qiita-im

元記事を表示

?【初学者用】Ruby・Rails環境構築

# はじめに
今回もPC変えたときに困らないよう環境構築を載せておきます。
PCの環境構築はこちらから↓

https://qiita.com/hondano_gentuki/items/0cb7367f390e36f1a047

# 環境構築

## Ruby
### rbenv と ruby-buildのインストール
まずはRubyの土台となる、rbenvとruby-buildを、Homebrewを用いてインストールします。
Homebrewをインストールしていない方は上記のPC環境構築をご覧ください。
“`Ruby:ターミナル
brew install rbenv ruby-build
“`
続いてrbenvをどこからも使用できるようにします。
“`Ruby:ターミナル
% echo ‘eval “$(rbenv init -)”‘ >> ~/.zshrc
“`
続いてzshrcの変更を反映させます。
“`Ruby:ターミナル
% source ~/.zshrc
“`
これでrbenv と ruby-buildをインストール部分は完成です。

### readl

元記事を表示

日付系のメモ

日付実装する時に参考にしたサイト
世の中には文章力のある国語マンのイイ人がたくさんいますね。

https://qiita.com/nao0725/items/409ece34ecbec5167125

https://qiita.com/ryouzi/items/950401a3d6032bd5641d

https://railsdoc.com/page/date_related

https://fuchiaz.com/ruby-rails-time-date/#Date

なんであんなに長文打てるのだろう
指先が腱鞘炎になるので、文字数少なめにメモしていきます…/(◉〜◉)

元記事を表示

rails serverの実行時にyarnに関するエラーが出たときの対処法

`’rails server’`を実行したら、下記のようなエラーが出た。

“`エラー内容
========================================
Your Yarn packages are out of date!
Please run `yarn install –check-files` to update.
========================================

To disable this check, please change `check_yarn_integrity`
to `false` in your webpacker config file (config/webpacker.yml).

yarn check v1.22.19
info Visit https://yarnpkg.com/en/docs/cli/check for documentation about this command.
“`

対処法

こちらの記事を参照し、yarnの再インストールするのかと理解

元記事を表示

【Rails】部分テンプレートに気をつけたい話

こんにちは。

この前部分テンプレート関連でちょっと想定外のエラーに出くわしたので、記事にしてみました。

実行環境は以下の通りです
* Ruby3.1.0
* Rails7.0.2.2

# どんな問題?
別リソースのコントローラからviewファイルをrenderするとき、renderするviewファイルの中で部分テンプレートを呼び出している時に発生する問題です。

簡単にいうと部分テンプレートの呼び出し方には少し注意しましょうということですが、文字の説明だけだととても分かりにくいのでイメージとコードで説明していきます

# 具体的なコードとエラー内容

例えば店舗の詳細ページで、ステータス変更の処理があったとします。
さらに、詳細ページには他の店舗一覧の表示をしているとします(部分テンプレートで実装)
↓以下イメージ
![7c1bc31c2571ec548451c3a1a2af3343.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605568/3884fd9f-c525-0f53-5a70-

元記事を表示

S3に保存した画像をRailsで取得する

## 結論
“`
s3_resource = Aws::S3::Resource.new(xxx)
s3_resource.bucket(‘BUCKET_NAME’).object(KEY_NAME).get.body.read
“`

## 背景
S3にアップロードしてある画像データを、RailsのViewで動的に表示したかった。

## 調べたこと
1. S3に画像がどう格納されているか
1. そもそもの画像データ

## S3にどう画像が格納されているか

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/UsingObjects.html
> Amazon S3 は、一意のキー値を使用して、必要な数のオブジェクトを保存できるオブジェクトストアです。これらのオブジェクトは 1 つ以上のバケットに保存し、各オブジェクトのサイズは最大 5 TB です。

つまり、S3にアップロードしている画像やテキストデータ = **オブジェクト**
オブジェクトにアクセスできるのが**キー**。
オブジェクトを保管しているの

元記事を表示

【Rails】投稿へのいいね!表示方法をコードにふりがな振ってまとめておく

# 処理の順序
1. 自分のログイン状況を判別して
2. 自分がその投稿に「いいね!」したかによって
3. 表示とリンクを変える

# 出来上がりの目標
まずは出来上がりの見た目をイメージします。
![スライド1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2688241/a03a2de2-af29-630d-2d07-1a4cb293750b.jpeg)

# 準備したもの
この機能を実装するのに必要な最低限のファイルです

## モデル
**Postモデル** 投稿に関する情報を保存するdb
`id`カラム: 投稿id 投稿作成と同時に付与される

**Userモデル** ユーザーに関する情報を保存するdb
`id`カラム: ユーザーid 投稿作成と同時に付与される

**Likeモデル** いいね!に関する情報を保存するdb
`post_id`カラム: どの投稿へのいいね!か
`user_id`カラム: 誰によるいいね!か

## コントローラ
**postsコントローラ**
`show`アク

元記事を表示

【Rails】「<投稿内容>… 続きを見る」という部分を作る。(truncateの実装とminitestの追加)

# はじめに
記事投稿サイトでよく見る「<投稿内容>… 続きを見る」という部分を作りたい。
なので作る!!!
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |
|4 | minitest| 5.11.3 |
|5| minitest-reporters| 1.3.8|
# 一覧表示テンプレートに文字数制限と”続きを見る”リンクを追加
truncateメソッドにより文字数制限をして表示する。
続きをみるはlink_toメソッドにより投稿の詳細ページ(showテンプレート)に飛ぶようにする。
“`app/views/microposts/index.html.erb

<%= trunc

元記事を表示

Ruby Solargraphの導入に手こずった初心者です

# エラー
Gemfileに**gem ‘solargraph’を**記述してインストールしようとすると

“`ruby
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory:
/usr/local/bundle/gems/jaro_winkler-1.5.4/ext/jaro_winkler
/usr/local/bin/ruby -I /usr/local/lib/ruby/3.1.0 -r
./siteconf20220624-1-yxgufs.rb extconf.rb
creating Makefile

current directory: /usr/local/bundle/gems/jaro_winkler-1.5.4/ext/jaro_winkler
make DESTDIR\= clean
current directory: /usr/local/bundle/gems/jaro_winkler-1.5.4/ext/jaro_winkler
ma

元記事を表示

記事投稿の「タイトル」を作りたいよ〜投稿内容に加えて

# はじめに
SNS風のWEBアプリを元に、記事投稿サイトにしていきたい。
SNSだとタイトルは必要ないため、内容のみの実装していた。
そこで、投稿にタイトルを追加し、投稿内容と一緒にタイトルをつけてタイムラインに表示させるようにする。
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |
# カラムの追加
contentカラムのみ実装されていたので、titleカラムを追加する。
rails generate migration “Add「カラム名」To「モデル名」 カラム名:データ型
の順で投げるとchangeメソッドの中に自動でadd_columnを生成してくれる。

“`言語名:ターミナル
$ rails generate migration AddTitleToMicroposts ti

元記事を表示

【Ruby翻訳】実務でリーダブルコードはどう役に立つのか(インデント、コメント)

# はじめに

どうも、未経験からエンジニア転職し半年が経ちました。
今回も前回に引き続きリーダブルコードを元に実務ではどう役に立ちそうか、逆にこれはやめた方が良さそうなど考えていきたいと思います。今回は適切なインデントとコメントに関してです。

https://www.amazon.co.jp/s?k=%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB+%E3%82%B3%E3%83%BC%E3%83%89&adgrpid=56076398369&gclid=Cj0KCQjwzLCVBhD3ARIsAPKYTcQ9BABns25tc2X99NY7Ymv4OkuqwRPWtwHjkHrAft2axqEo7Pg51nkaAmmiEALw_wcB&hvadid=591886305975&hv

元記事を表示

Ruby3(Rails7) / MySQL8 の構成をdocker-composeで構築する

# はじめに

Dockerコンテナでローカルに環境構築をしたので
作業内容をメモとして残します。

RailsAPIの挙動を確かめるために、構築したものです。

# 構成の概要
* Ruby: 3.1
* Rails: 7.0 (APIモード)
* MySQL: 8.0

# ディレクトリ構成

作業前にディレクト・ファイルを用意しておきます。

“`zsh:ディレクトリ

.
├── Dockerfile
├── Gemfile
├── Gemfile.lock
├── docker-compose.yml
└── entrypoint.sh

“`

# 設定ファイル

各種ファイルの設定していきます。

## docker-compose.yml

まずは複数コンテナを操作するdocker-composeから設定します。

ここではMySQLのパスワードを直書きしていますが
本来は環境変数をまとめる.envなどのファイルを
gitignoreで追跡除外して、GitHub上で
一般に公開されないように考慮するべきです。
(今回は行っていません)

“`yml:doc

元記事を表示

達人プログラマーを読んでみて

# はじめに
– [達人プログラマー](https://www.amazon.co.jp/%E6%96%B0%E8%A3%85%E7%89%88-%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC-%E8%81%B7%E4%BA%BA%E3%81%8B%E3%82%89%E5%90%8D%E5%8C%A0%E3%81%B8%E3%81%AE%E9%81%93-Andrew-Hunt/dp/427421933X)を読んだので気になった箇所の感想を述べながら自分なりの具体例を交えて解説していきます。
– 参考程度に自分のエンジニア歴は1年で Rails, React をメインに web アプリケーション を開発しています。

# 割れた窓は放置しない
– 一回の妥協が後に破綻を生むという話
– Typescript でいえばこう
“`typescript:hoge.ts
hogeMethod(a: any) {
// 何かの処置
}
“`
– 一回でも any で妥協すると無

元記事を表示

表示速度を上げるための個人的な考察 N+1問題編 

N+1問題:データベースからデータを取り出す際に、大量にSQLが発行されて
動作が遅くなってしまう問題のことです。SQLとはデータベースとのやりとりをする際に用いるデータベース型言語(プログラミング言語ではないので注意)です。

実際にN+1問題が発生している様子を見ていきましょう。
N+1問題は1対多のアソシエーションの場合に多くみられるので、投稿一覧ページを見ていきたいと思います。

![ra.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/10021d84-5f2b-1401-9511-606e8a179d40.jpeg)

投稿一覧ページを表示した際のターミナルです。
見てわかる通り、多くのSQL文が発行されています。
いろいろな機能をつけていてSQL文が複雑になっているので簡単な例を用いて説明します。

def index
@posts = Post.all #データベース上から投稿データを取得
end

投稿一覧ページに関するメソッド定義で

元記事を表示

OTHERカテゴリの最新記事