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

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

音声ファイルを保存、再生、ダウンロード機能を実装。【Ruby】

# 目的
音声ファイルをアップロードし保存ができ、再生やダウンロードができるように実装します。
以下の画像のようなオーディオプレーヤーが実装されるのがゴールです。
[![Image from Gyazo](https://i.gyazo.com/c7beca78223170f1134c6b610b1f7668.jpg)](https://gyazo.com/c7beca78223170f1134c6b610b1f7668)

# 手順
### オーディオファイルを保存したいモデルにカラムを追加。

“`ターミナル.
% rails generate migration AddFileToモデル名 file:string
“`
“`ターミナル.
% rails db:migrate
“`
### ストロングパラメータの修正

“`songs_controller.rb
# 省略

private

def song_params
params.require(:song).permit(:file, :title)  # permit()の中に:fileを追

元記事を表示

rails 7.0.1 + MySQL/SQLiteの構成だとrails6.0で作成したmigrateファイルの`references`/`belongs_to`定義が動かない

# TL;DR

`MySQL`を使用している`rails`アプリケーションの場合、`rails`バージョンを7.0.1にして、`rails` 6.0で生成したmigrateファイルを使ってdb migrateを行うとエラーが発生します

# 詳細

## 発生するケース

例えば`users`テーブルが存在していて、`users`に紐づく子テーブル`posts`を追加しようとした場合で以下のようなmigrateファイルをrails6.0の作成したとします。

“`ruby
class Posts < ActiveRecord::Migration[6.0] def change create_table :posts do |t| t.references :users, foreign_key: true t.timestamps end end end ``` の後rails7.1にアップグレードを行い`migrate reset`などmigrateを再度実行した場合に以下のエラーが発生します。 ``` Column `us

元記事を表示

【RSpec】ActiveRecordを継承しないクラスでFactoryBotを作成したい

##initialize_with
Rubyの任意のクラスでFactoryBotを作成したいときは“`initialize_with“`を使う。

“`ruby
# user_info.rb
class UserInfo
attr_accessor :hoge

def initialize(hoge)
@hoge = hoge
end
end

# factories.rb
factory :user_info do
hoge { Fuga.new }

initialize_with { new(hoge) }
end

build(:user_info).hoge #Fugaクラスのインスタンスが返る
“`

####注意
**create(:user_info)**すると下記のエラーが出る。

“`
NoMethodError:
undefined method save!
“`

##参考

https://github.com/thoughtbot/factory_bot/blob/main/GETTING_STARTED.md

元記事を表示

rails s が上手くいかない。rails newが作成できない時。

簡潔に書くと、

**rubyとrailsのバージョンの互換性**

に問題がある場合がある。

その為、下記のURLを確認して見直すことをおすすめする。
もし、互換性がないものであればURL通りにRuby、railsを入れ直してみると解決する可能性がある。
https://www.hmallett.co.uk/2018/08/ruby-and-ruby-on-rails-version-compatibility/

補足:上記の方法は下記のようにPumaさえも立ち上がらない人向け
“`=> Booting Puma
=> Rails 5.2.6 application starting in development
=> Run `rails server -h` for more startup options
*** SIGUSR2 not implemented, signal based restart unavailable!
*** SIGUSR1 not implemented, signal based restart unavailable!
*** SIGH

元記事を表示

[rails]楽天APIの商品検索でエラー(Application ID is not defined)

#はじめに
railsのポートフォリオを作成している際に、楽天APIを用いた商品検索機能を実装しようとした際に、
エラーに引っかかってしまい、時間を食われてしまったので備忘録として残します。

#開発環境
ruby ‘3.0.0’
Rails 6.0.3.4

#参考サイト
以下のサイトを参考にし、楽天API商品検索機能を実装しようと試みました。
https://www.tom08.net/2016-08-29-133539/
https://takoyarosan.hatenablog.com/entry/2018/07/28/211709
https://freesworder.net/rakuten-api-rails/

#エラー内容
![スクリーンショット 2022-01-18 12.07.28(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1874224/e9f0ae4f-0dcb-3e55-e77d-8d2f1812d85d.png)

binding.pryで、でバックしたものの、

元記事を表示

RSpecのControllerテストでNoMethodError: undefined method `get’ for xxxx と表示される

# はじめに
RailsでRSpecを使用してcontrollerのテスト時のエラー NoMethodError: undefined method `get’ for xxx について
# 目次

1. [Rspecでのバージョンの違い](#Chapter1)
1. [エラーの原因](#Chapter2)
1. [参考文献](#reference)



# Rspecでのバージョンの違い
Rspec3以降ではデフォルトでファイルの場所から自動的に推測する機能がなくなっています。
Rspec3以降ではcontorollerのテストをする時は指定する必要があるようです。


# エラーの原因
**1.typeを指定していない**(今回の私)

“`rb
# type: :controller または type: :request とする必要あり
RSpec.describe Api::V1::PostsController

元記事を表示

railsにおける.(ドット)の役割

こんにちは!石田佳介です!

僕がインターン生として実務に入っていて、一つ気になったことがあったのです。

rubyのコードでこのようなコードを見たことがありませんか?

“`

<%= @books.each do |book| %>

<%= book.title %>

<%= book.body %>

<% end %>

“`

この書き方って不自然じゃないですか?
rubyの公式のドキュメントにもこう書いてありました

“`
xxx.yyy
 オブジェクトのメソッド
“`

[ruby公式ドキュメント](https://docs.ruby-lang.org/ja/latest/doc/symref.html#period)

公式ドキュメントのいう通りだとするならば、titleやbookはメソッドになるよなっておもったわけです。titleやbookってカラムじゃね?って思ったので、変だなって思いました。

そこで自分なりに調べてまとめましたので、

元記事を表示

【Rails】「rails g controller コントローラー名」を実行すると…?

## 「rails g controller コントローラー名」を実行すると…?
・コントローラー名(複数形)+controllerという名前のcontrollerが生成される。
・viewsフォルダの中にコントローラー名と同名のフォルダが作られる。

元記事を表示

Twitterのシェアボタンを実装

# 目的
今回、以下の画像の下の方にあるTwitterシェアボタンの実装をどうやったかご紹介します。
同じように実装したいと思っている人のお役に立てれば嬉しいです。

[![Image from Gyazo](https://i.gyazo.com/a98adf439feb3f86c27b89fd23d546a6.jpg)](https://gyazo.com/a98adf439feb3f86c27b89fd23d546a6)

Twitterのボタンをクリックすると別タブでTwitterのページが表示され以下の画像のように
文字やシェアしたいURLが表示されツイートできる状態になります。

[![Image from Gyazo](https://i.gyazo.com/7bf50f1b79b39f19044029ba061c257e.png)](https://gyazo.com/7bf50f1b79b39f19044029ba061c257e)

このようにシェアしたいページをボタンを押せばシェアできるようになっています。

# 実装
結論から言うと以下のように実装しています

元記事を表示

【Rails】The asset “application.css” is not present in the asset pipeline. の解消方法

railsアプリケーションの開発を行っていたら、アクセス時に以下の画面が出てきた。
(関係ないかもですが私はRspecを導入したら発生しました。)

![スクリーンショット 2022-01-17 17.03.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1292797/9e6fef68-e9ca-4934-0f61-510214a9b83e.png)

# 環境

ruby 2.7.5
Ruby on Rails 6.1.4.4
Docker 20.10.11 / docker-compose 2.2.1
PostgreSQL 14.1

#原因

`log/production.log`を確認したところ、以下のエラーが出ていた。

“`ruby
ActionView::Template::Error (The asset “application.css” is not present in the asset pipeline.):
“`

#解決策

`config/environme

元記事を表示

【書評】Ruby初学者がプロを目指す人のためのRuby入門改訂第2版を読んで学んだこと

## はじめに
久しぶりの投稿になります。Tassyです。
この度、「プロを目指すための人のRuby入門 改訂第2版」を読ませていただきました。
https://blog.jnito.com/entry/2021/11/11/082704
まさか、当選するとは!!と言う気持ちと感謝の気持ちでいっぱいです。
## プログラミング歴
– 受託開発企業で1年3ヶ月働いている
– 基本的にPHP(Laravel)で実装することが多い
– RubyはProgateで一通り触ったことがあるくらい
– 実際にRuby(Ruby on Rails)を使ってアプリを開発したことはない
Rubyについてはど素人です。

## 学べたこと
– Rubyの基本構文(ハッシュ、ブロックetc)
– オブジェクト指向プログラミングとは
– テスト駆動開発の実践
– 正規表現について
– クラスについて
– yeild、Procについて
– パターンマッチについて

Rubyの基本的な構文を学べるのはもちろんのこと、実際にirbを使って手を動かしながらコードを確認できるので、楽しい。そう、Rubyを書くのは

元記事を表示

【シンボルについて】「:hoge」だったり「 hoge:」だったり【ややこしいから整理した】

“`
# 普通のハッシュ   (ハッシュの値の呼び方は、  hash[“key1”] )
hash = {“key1” => value1, “key2” => value2}

# 前置コロンを使う    (ハッシュの値の呼び方は、 hash[:key1] )
hash = {:key1 => value1, :key2 => value2}

# 後置コロンを使う  (ハッシュの値の呼び方は、 hash[:key1] )
hash = {key1: value1, key2: value2}
“`

## 普通のハッシュ
キー名を文字列で指定して、「=>」でつないでキーに対応する値を記載します。
ハッシュの値を呼ぶ時は、キー名の文字列を指定します。

## 前置コロン(シンボル)を使う
まず、コロンをキー名の前に書く前置コロンは、シンボルを表します。

シンボルとは、Rubyのオブジェクトのひとつの種類です。文字列の代わりに使うこともできますが、必ずしも文字列と同じ挙動をするわけではなく別物です。

ハッシュでは、キー名指定の部分をシンボルで置き換えることができ

元記事を表示

rails g modelを実行するとどうなるか?そしてその後にやるべきこととは?

## rails g modelをすると

①db/migrateフォルダに新しくマイグレーションが作成されます。
②新しく作られたマイグレーションファイルの中身をざっと確認する。
③以下のコマンドでデータベースへと反映させる。

“`
rails db:migrate

#rails g modelでモデルを作成したあとは、このコマンドを実行してデータベースにちゃんと反映させること!
“`

マイグレーションファイルとは?
マイグレーションファイルは、データベースを生成する際の設計図になるものです。 また、マイグレーションファイルを実行することで、記述した内容に基づいたデータテーブルが生成されます。

>引用元:
「マイグレーションファイルとは?」より一部抜粋
https://qiita.com/jackie0922youhei/items/09a7b081e40506f07358#:~:text=%E3%83%9E%E3%82%A4%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%82%A1%E

元記事を表示

Rails7をちょっと試す(Bootstrap編)

## はじめに

Rails 7.0.0 では、[Bootstrap](https://getbootstrap.com/) が簡単に利用できるようになっています。
今回は、Bootstrap を試してみたいと思います。

Bootstrap を使うためには、npm と yarn が必要です。

以下のバージョンで確認しました。

– Ruby 3.0.2
– Rails 7.0.0
– npm 8.3.0
– yarn 1.22.17

## Rails プロジェクトを作る

新しくRailsプロジェクトを作ります。このとき `–css` を指定します。
(データベースオプションを指定しているのに深い意味はありません。)

“`shell
mkdir rails_sandbox
cd rails_sandbox
rails new . –database=postgresql –css=bootstrap
“`

## scaffold を実行する

scaffold を使って簡単なCRUDを作ります。 `Bootstrap` の確認をしたいだけなので適当です。

“`s

元記事を表示

[Rails][devise]追加したカラムにストロングパラメーターを使えるようにしよう

備忘録として

ユーザー管理機能を実装できる**devise**
デフォルトとして`「Eメールアドレス」「パスワード」`のカラムがすでに存在しており、ストロングパラメーターも使用できるが、自分で追加するカラム(ユーザー名など)にはストロングパラメーターは使えない状態なので、使えるようように記述する必要がある。

### 前提
– deviseを導入済み→[deviseの導入手順](https://qiita.com/Shi-raCanth/items/ce98a39800401cc77ee0)
– マイグレーションファイルでカラムを追加している

## application_controller.rbファイル
すべてのコントローラーが継承しているファイル。
ここに処理を記述しておくことで、すべてのコントローラーで共通となる処理を作ることができる。
`deviseの処理を行うコントローラーはGem内に記述されているため編集することができない`ので、このapplication_controller.rbを編集していく。

## devise_parameter_sanitizerメソッド

元記事を表示

【Rails × AWS】本番環境のDB(MySQL)をRDSに移行し、タイムゾーンを日本時間に変更する

EC2環境にデプロイしていたRailsアプリのデータベースを後からRDSに移行したので自分自身の復習も兼ねて手順をまとめました。

#前提

“`
Rails -v 6.0.4
MySQL -v 5.7.36
サーバー: nginx
“`

#AWS側の設定

1. AWSのRDSダッシュボードを開く

2. 「データベースの作成」を選択

3. エンジンのタイプを選択
現在使用しているSQLの種類を選択。
今回はMySQLを選択します。
![スクリーンショット 2022-01-16 21.23.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1640672/6e69b3e0-cd4c-abc5-deaa-2fd281dcaf56.png)

4.MySQlのバージョンを選択
![スクリーンショット 2022-01-16 21.26.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1640672/e7db83

元記事を表示

Webの仕組みとHTTP通信について

##ブラウザとサーバー
ブラウザ:今表示されている画面
サーバー:様々なデータを保存している大きなPCのイメージ

ブラウザではサーバーからファイルをダウンロードしてきて表示している。ファイルの中身にはHTML、CSS、JavaScriptなどの情報が格納されている。

(ブラウザ) ←←←←← (サーバー)
       ファイル
    (HTML、CSS、JS)

##HTTP通信について
HTTPとはブラウザとサーバーのやりとりの方法
基本は、リクエストとレスポンス

      リクエスト
      →→→→→
(ブラウザ)     (サーバー)
      ←←←←←
      レスポンス

リクエストで欲しい情報をサーバーに投げて、サーバーがその情報を返す。
このリクエストとレスポンスのやりとりのルールを作るのがサーバーサイド言語。

##HTTPの基本のメソッド4つ

###①GET データの取得
Webページを表示するときに使う

     このページみたい
      →→→→→
(ブラウザ)     (サーバー)
      ←←←←←
     はい、ペー

元記事を表示

CRUD処理(rails6)エラー解決

#CRUD処理を実装中に発生したエラーについてのアウトプット。

##エラー内容
投稿した情報を削除しようとした時に発生したエラー。
削除なのにHTTPメソッドがGET、本来はDELETE.

![スクリーンショット 2022-01-09 14.51.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2505299/80d052a8-cf80-e74a-212b-ea65fdae8a66.png)

##考えられる原因
1.ルーティングが間違っている。
2.コントローラーアクション間違い
3.ビューファイル記述間違い

##エラー解消の流れ
1~3が間違っていないか確認。

“`
ルーティング
delete ‘/users/:id’, to: ‘users#destroy’

コントローラー
def destroy
user = User.find(params[:id])
user.destroy
end

削除ボタン追加
<%= link_to '削

元記事を表示

rails(Docker)+nginxでPermission denied @ rb_io_reopen – /myapp/log/puma.stdout.log (Errno::EACCES)が発生する

# はじめに

Rails環境をDockerを利用して環境構築していたのですが、Nginxをつないだところエラーが発生してほかの記事があまり参考にならなかったため自分なりにまとめていきます。

主にWSL2でDockerを使っている方がこのエラーの対象になるかと思います。

# 問題

DockerでRailsとNginxの環境を用意して、Railsコンテナのユーザーを`app`(rootではない)にdocker-compose.ymlで変更した状態でコンテナを起動すると以下のエラーが発生します。

“`
rails | * Listening on http://0.0.0.0:3000
rails | * Listening on unix:///myapp/tmp/sockets/puma.sock
rails | Use Ctrl-C to stop
rails | bundler: failed to load command: puma (/usr/local/bundle/bin/puma)
rails

元記事を表示

Rails × Vue で vue Router を使用する

rails アプリの中でVueを使用する場合にVue Routerを使ったページの切り替えができるまでの過程を書いていきます。

## Vue Routerとは

Vue Routerとは、Vue.jsを使ったアプリケーションでルーティング制御をするためのプラグインのことです。これを利用することでリクエストされたURLごとに表示するページを切り替えることができるようになります。

## Vue Routerを使いページの切り替えができるようになるまで

Vue Routerでページの切り替えをするには

– Vue Routerのインストール
– Vue Routerの設定
– application.jsファイルでVue Router の設定をimportする
– 表示したいページ(コンポーネントの用意)
– rails側のルーティングの設定

が必要となるので順番に進めていきます。

## Vue routerのインストール

まずは Vue Routerをインストールしていきます。インストールの仕方は様々だと思いますが自分の環境では以下のコマンドでインストールを行いました。

`

元記事を表示

OTHERカテゴリの最新記事