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

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

Mysqlにデータベースを変更する

database.ymlの中身を以下のように書き換えてください。

“`yml:config/database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
socket: /tmp/mysql.sock
development:
<<: *default database: amazon_app_mysql_development test: <<: *default database: amazon_app_mysql_test production: <<: *default database: amazon_app_mysql_production username: amazon_app_mysql password: <%= ENV['AMAZON_APP_MYSQL_DATABASE_PASSWORD'

元記事を表示

Rails Tutorial 第13章 演習13.4.1.2 paramsハッシュがなくなる

## 演習13.4.1.2 paramsハッシュがなくなる
ネットの他の方を見ると、params:ハッシュがなくなっている方が多かったです。一方テキストではなくなっていません。最近テキストが書き換えられたのかもしれません。

ネットの方の例

“`ruby:test/integration/microposts_interface_test.rb
post microposts_path, micropost: { content: content, picture: picture }
“`

テキスト

“`ruby:test/integration/microposts_interface_test.rb
post microposts_path, params: { micropost:
{ content: content,
picture: FILL_IN } }
“`

### type=”i

元記事を表示

[Rails]エラーStandardError: An error has occurred, all later migrations canceled: Column `外部キー名` on table `テーブル名` does not match column `id` on `テーブル名`の対処方法

## エラー内容

“`
$ rails db:migrate
“`

上記コマンドを実行すると発生するエラー。ターミナルでのエラー表記は以下の通り。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/643372/a1d49d1d-e075-0f17-69c9-7e68ad077c65.png)

“`エラー文一部抜粋.
Column `user_id` on table `items` does not match column `id` on `users`, which has type `bigint(20)`. To resolve this issue, change the type of the `user_id` column on `items` to be :bigint. (For example `t.bigint :user_id`).
“`

エラー文の一部を翻訳してみると…。

“`エラー文翻訳.
テーブル `items` のカラム `user

元記事を表示

[Ransack] ransackable_scopesには気を付けろ

# 結論
`ransackable_scopes`で実行する`scope`に渡す引数が以下の値だったら
`ArgumentError wrong number of arguments (given 0, expected 1)`
が発生するから気を付けろ!!!

– `”true”`, `”TRUE”`, `”t”`, `”T”`, `1`, `”1″`
– `”false”`,`”FALSE”`,`”f”`,`”F”`,`0`,`”0″`

これらの値はそれぞれTrue, Falseに**暗黙的に変換**されるため、引数に渡せない。

## 解決策
“`config/initializers/ransack.rb
Ransack.configure do |config|
config.sanitize_custom_scope_booleans = false
end
“`
これを追記するだけで、**上述の値全てを渡せるようになります**。[^1]

## 渡せる値をカスタムしたいなら
**諦めてください。**
暗黙的に変換される値は [`Ransack::Con

元記事を表示

rails tutorial 第8章

#はじめに

独学で[rails tutorial](https://railstutorial.jp/)を進めていく過程を投稿していきます。

進めていく上でわからなかった単語、詰まったエラーなどに触れています。

個人の学習のアウトプットなので間違いなどあればご指摘ください。

初めての投稿なので読みにくいところも多々あるかと思いますがご容赦ください。

#第8章 基本的なログイン機構
##8.1.2 ログインフォーム
ログインフォームを作成時のscopeの働きについてわからなかったので調べました。

“`
form_with(url: login_path, scope: :session, local: true)
“`

参考
https://qiita.com/akilax/items/f36b13f377f7e442bc73

あまり深く考え過ぎずにパラメーターを渡す際に必要なname値のプレフィックスと考えるのが良さそうです。

ざっくりと自分なりにまとめると、Active Recodeを継承しているオブジェクトのフォームでは

“`
<%= form_with(

元記事を表示

[Rails]1対1対多の場合のdelegateとhas_many-throughの挙動の違い

下記のように1対1対多の関係のモデルがあるとします。

* UserとExamineeは1対1
* ExamineeとTestは1対多

“`ruby
class User
has_one :examinee
end

class Examinee
belongs_to :user
has_many :tests
end

class Test
belongs_to :examinee
end
“`

では、Userモデルから関連するTestモデルを取得したいときはどのように実装しますか?

様々なやり方がありますが、ActiveRecordの便利機能`delegate`を使うか、`has_many-through`を使うことが多いのではないでしょうか?
どちらもやりたいことは達成できますが、発行されるクエリが少し違うので紹介します。

# delegate

delegateを使うとメソッドを別クラスに委譲することが出来ます。
詳細はRailsガイドを参照してください。
[3.4.1 delegate](https://railsguides.jp/active_

元記事を表示

Rails 6で認証認可入り掲示板APIを構築する #5 controller, routes実装

←[Rails 6で認証認可入り掲示板APIを構築する #4 postのバリデーション、テスト実装](https://qiita.com/rf_p/items/0b2ccd908cac4bb6ecc6)

# controllerを作る

前回はmodelを作ったので、今回はcontrollerを実装していきます。

“`powershell
$ rails g controller v1/posts
“`

実行するとcontrollerとrequest specファイルが生成されます。

とりあえずcontrollerを以下まで実装します。

“`rb:app/controllers/v1/posts_controller.rb
# frozen_string_literal: true

module V1
#
# post controller
#
class PostsController < ApplicationController before_action :set_post, only: %i[show update destroy]

元記事を表示

Railsのcsvダウンロードで直面する数々の問題を解決したらgemができた 〜csb gemの紹介〜

## はじめに: csvダウンロードの処理をちゃんと書くのって意外と面倒じゃないですか?

例えば「rails csv ダウンロード」で検索すると以下のようなサンプルコードがよく出てきます。

“`ruby:posts_controller.rb
class PostsController < ApplicationController def index @posts = Post.all end end ``` ```index.csv.ruby require 'csv' CSV.generate do |csv| column_names = %w[投稿日 カテゴリ タイトル 本文] csv << column_names @posts.each do |post| column_values = [ l(post.created_at.to_date), post.category.name, post.title, post.content, ] csv << colu

元記事を表示

rails チュートリアル

1.3.4からスタート

元記事を表示

rails newする際のオプションとrails newした後に行う設定

個人的に「`rails new`をする際によく使うな」と感じるオプションと、新規プロジェクトを作成したときによく行う設定を備忘録を兼ねてまとめます。

# rails newをする際のオプション
まずは`rails new`をする際によく付けるオプションについてです。
一つ一つのオプションについては後述します。

“`
rails _6.0.3.2_ new appname –database=mysql –skip-test
“`

### railsのバージョン指定

“`
rails _6.0.3.2_ new
“`
こうするとrailsのバージョンを指定することができます。
`_6.0.3.2_`の部分はその都度値を変えてください。

### 使用するデータベースの指定
“`
–database=mysql
“`
このようにDBを指定しないと、デフォルトのDBは`sqlite`というものになります。
今回は`mysql`を使用する設定です。

### Minitestを生成しない
“`
–skip-test
“`
デフォルトでプロジェクトを生成すると、M

元記事を表示

技術記事を書く時に意識していること

## 自分のために書く

「思考の整理 + 未来の自分のための資料作りが目的で、周りからの反応はおまけ」
というスタンスでいると雑な記事をバンバン書ける。自分は執筆時間が5分かかっていない記事の方が多いと思う。そして記事数に対してLGTM等は少ない。

## 自分の言葉で書く

普段自分が使う言い回しをした方が、後から振り返った時に理解しやすいです。カッコつけない方が良い。
文章は、きれいさや構造の正しさより、テンポを意識。

## [Qiigle](https://qiigle.com/)の検索に引っかかるようにする
将来検索に使いそうなワードは入れておく
https://qiigle.com/

## さっさと本題に入る

「記事の対象者」「この記事でわかること」「この記事で触れないこと」とかが必要なのは超長文記事か、反感を買いかねない踏み込んだ記事を書くときだけで良い。
あいさつとかギャグ的なものは技術記事には必要ない。

## その命名じゃないといけないのか、任意の名前で良いのかを明確にする

任意に名前をつけられる部分がアプリ名にちなんだ名前だったりすると、命名規則があるよう

元記事を表示

yamlファイルのコメントアウトをエディタのショートカットで解除してエラーが出るときに確認すること

### おことわり
Railsで遭遇したエラーではありますが、Rails以外でも起こりうるのでタイトルからRailsを外しています。

### 問題が起こった状況
Railsの設定ファイルの一つに、`storage.yml`という、ストレージ周りの設定をするyamlファイルがあるのですが、
その中に、デフォルトではコメントアウトされているAWSのS3に関する設定があります。

今回、S3を設定する必要があったので、それを意気揚々とIDEのショートカットでコメントアウトを解除したときに問題が発生しました。

“`:storage.yml
test:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>

local:
service: Disk
root: <%= Rails.root.join("storage") %>

# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)

元記事を表示

deviseを使ったユーザー情報の変更をする場合パスワードが保存されない時のedit画面での設定

##deviseを使ったユーザー登録情報の編集をする場合、edit→updateを行うときビュー画面のエラーメッセージがCurrent password can’t be blankと表示され、編集画面が保存されない場合の解決方法。

ruby ‘2.6.5’
rails ’6.0.0
devise 4.7.2

###2つのdeviseをもつアカウントがあり、ユーザー登録情報を編集し、保存をしたい場合の設定の流れをまとめます。

#####①ルーティングの確認/rails routes でuserのregistrations/editのパスを確認します。

“`

edit_user_registration GET /users/edit(.:format) users/registrations#edit
“`

edit_user_registration_path と確認が取れました。これをlink_toでパスを作成します。

#####②contro

元記事を表示

【Rails】rakeタスクを実装する

## rakeタスクとは
ファイルに記述した処理をコマンドラインから実行する機能です。
ユーザーの属性に応じてステータスを変更する、CSVデータをインポートする、任意のタイミングでユーザーにメールを送る、などなど様々な用途で使われます。

## 基本的な使い方
### タスクファイルを生成
“`zsh
$ rails g task qiita_task
“`
### 実行したい処理を記述
“`rb
namespace :qiita_task do
desc ‘hello worldします’
task :hw do
puts ‘Hello World’
end
end
“`
### 実行
“`zsh
$ rake qiita_task:hw
“`
## その他
### タスクの中にDBに接続する処理が含まれる場合
DBに接続する場合、以下のように`environment`と記述する

“`rb
namespace :qiita_task do
desc ‘最近登録したユーザーにメールを送信’
task send_email_to_recent_u

元記事を表示

[解答]rails にカート機能を追加する-モデル部分

購買者購入履歴のためのモデルを作る

“`terminal:ターミナル
$ rails g model UserProduct
“`
モデルとマイグレーションファイルができたと思うので、マイグレーションファイルを編集する

“`ruby:db/migrate/20190831095111_create_tags.rb
class CreateUserProducts < ActiveRecord::Migration[5.2] def change create_table :user_products do |t| t.integer :user_id #購入者 t.integer :product_id #商品 t.integer :lot #買った個数 t.timestamps end end end ``` 編集し終えたら、データベースを更新するためにマイグレーションをかける ```terminal:ターミナル $ rails g db:migrate ``` 購買者購入履歴の関係をmodelで定

元記事を表示

commit failed exit code 1のエラー解決方法

【概要】
—————————————-
1.結論

2.なぜ”commit failed exit code 1″になるのか

3.どのように解決するか

4.ここから学んだこと

1.結論
—————————————-
git cloneしたファイルを削除する。

2.なぜ”commit failed exit code 1″になるのか
—————————————-
![スクリーンショット 2020-09-09 15.03.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686400/271d8699-79b1-ea62-fd07-24bcd87628e9.png)

以前に

“`terminal:ターミナル
% git clone https://github.com/”

元記事を表示

Docker上のRailsをherokuへデプロイする

##herokuへデプロイする練習
Dcokerコンテナ上に、Railsアプリを組んでCircleciを使って自動デプロイまでを一気にやろうとしたら
迷宮入りしたので、原点回帰しようと思います。(第2段)

##自分の環境
Ruby : 2.6.6
rails : 6.0.3.2
git : 2.23.0
heroku-cli : 7.42.13 darwin-x64 node-v12.16.2
Docker : 19.03.12

開発環境は、MySQLで
本番環境は、PostgreSQLというパターンで組んでみようと思います。

###手元のDocker上にRailsアプリを用意する
まずは、アプリを作るディレクトリを作成し、そこにtouchコマンドで必要な諸々を用意します。

“`:terminal
$ touch {Dockerfile,docker-compose.yml,Gemfile,Gemfile.lock,entrypoint.sh}
“`

“`:Dockerfile
FROM ruby:2.6

RUN curl -sS https://dl.yarn

元記事を表示

【Rails】アソシエーションの種類(1対多 / 多対多)

##脳内整理のために
プログラミング初学者がRailsを学び始めて最初に、ん?となるポイント(のはず)であるアソシエーション。
アソシエーションについて個々の記事はいくらでもあるので、全体像としてその種類を整理してみました。

##アソシエーションの種類
![アソシエーション表.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586664/66c88909-d0a7-b33b-d0aa-10cbf68c1443.png)
表の通りに分類できます。(今回1対1のアソシエーションは省略しました。)

##まとめ
– 多対多は中間テーブルが必要
– 自己結合は同じモデルを参照する外部キーが必要

元記事を表示

【Ruby】関数における例外処理

## はじめに
この記事は数多ある例外処理についての補足的なものです。具体的には、記事で紹介されてないパターンについて検証した結果を残します。

## 環境
– Mac
– Ruby 2.6.3

## 関数の中での使用

関数の中では以下のように書けます。

“`ruby
def method
puts “hoge”
a = 1 / 0
rescue ZeroDivisionError
puts $!
end
“`
begin, endを省いた形ですね。このような形の場合、

“`ruby
a = 1 / 0
“`
がエラーを発生させるであろうことは一目瞭然です。しかし、以下の場合であればどうでしょうか。

“`ruby
def method
# 膨大な処理1
# エラーが発生しそうな処理
# 膨大な処理2
rescue StandardError
puts $!
end
“`
さて、このコードを見た人がすぐにエラーの発生しそうな処理を見抜けるかというと怪しいところです。その場合はあえてbegin, endを書いたらいいと思います。

“`r

元記事を表示

素のrailsアプリをherokuにデプロイ

Dcokerコンテナ上に、Railsアプリを組んでCircleciを使って自動デプロイまでを一気にやろうとしたら
迷宮入りしたので、原点回帰しようと思います。

##herokuへデプロイする練習
##自分の環境
Ruby : 2.6.6
rails : 6.0.3.2
git : 2.23.0
heroku-cli : 7.42.13 darwin-x64 node-v12.16.2

###Railsアプリを用意する
“`:terminal
$ rails new heroku_app #今回はheroku_appというものを用意
$ cd heroku_app
$ rails g scaffold blog title:string body:text
$ rake db:migrate
$ rails s
“`

##Railsアプリをデプロイする準備
– config/routes.rbの設定
– Gemfileの設定
– config/datebase.ymlの設定
– config/enviroments/production.rbの設定

###config

元記事を表示

OTHERカテゴリの最新記事