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

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

Mysql2::Error::ConnectionError: Access denied for user ‘root’@’localhost’ (using password: YES)

# やろうとしていること
ローカル環境で作ったポートフォリオ(個人アプリ)をAWSにデプロイしようとしているところです。
本番環境でデータベースを作ろうとしたのですが、エラーが出てしまいました。

# エラー文
“`
[user@ip-00-0-0-000 pfc-master]$ rake db:create RAILS_ENV=production
Access denied for user ‘root’@’localhost’ (using password: NO)
Couldn’t create ‘pfc-master_production’ database. Please check your configuration.
rake aborted!
Mysql2::Error::ConnectionError: Access denied for user ‘root’@’localhost’ (using password: NO)

Tasks: TOP => db:create
(See full trace by running task with –tr

元記事を表示

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

←[Rails 6で認証認可入り掲示板APIを構築する #5 controller, routes実装](https://qiita.com/rf_p/items/2b40f08e0509fb8ff56b)

# showテストの実装

前回のindexに続き、showのテストとcontrollerを実装していきます。
showは、パラメータのidを元にfindして返すという挙動です。

テストは正常にレスポンスが返ってくることと、存在しないIDの時に404が返ってくることあたりでしょうか。

“`diff:spec/requests/v1/posts_controller.rb

+ describe “GET /v1/posts#show” do
+ let(:post) do
+ create(:post, subject: “showテスト”)
+ end
+ it “正常レスポンスコードが返ってくる” do
+ get v1_post_url({ id: post.id })
+ expect(response.st

元記事を表示

HerokuでDocker環境Rails MySQLなものを動かす。deviseかつtwitter APIを隠しながら

人に見せる用に書いていません。

自作記事のお父上、Rails+MySQL+Nginx+Unicorn+Docker+CircieCIな開発環境を作りたいえ〜の記事の続き。

上で作った環境に[[*Rails*] deviseの使い方(rails5版)](https://qiita.com/cigalecigales/items/f4274088f20832252374)を追加し、かつTwitterAPIを`gem ‘dotenv-rails’`で隠しながら、本番環境のherokuにアップロードした。

### ①docker-compose.ymlのコマンドを変更する

“`docker-compose.yml
command: /bin/sh -c “rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b ‘0.0.0.0’”
“`

### ② gem ‘dotenv-rails’を導入する

目的:TwitterAPIキーをGitHubのローカルに入れたくない

envファイルはGitの管理に入れたくな

元記事を表示

rails チュートリアル

次回2.2.2から

元記事を表示

【Rails】俺のための初期設定 + Gem導入

rails newをするときに、随時設定をしたりGemを入れるのが面倒だったので、自分用にcloneするだけでいいリポジトリを作りました。
https://github.com/aiandrox/rails_app

ついでに作業をざっくりまとめました。

DockerやCircleCI用の設定はしていません。
実際に導入する際にはGitHubでバージョン指定や手順などを確認してください。

## バージョン

– Ruby 2.7.1
– Rails 6.0.3.3
– yarn 1.22.5

初期コマンドは`rails new rails_app –skip-test-unit –database=mysql`です。

## 日本語化・時刻の設定

“`rb:config/application.rb

module RailsApp
class Application < Rails::Application ... # 言語・タイムゾーンを日本に設定 config.i18n.default_locale = :ja confi

元記事を表示

Webpackerとは (Rails6で rails s してエラーが出た時の話)

Rails6で新規アプリを作成しようとし、データベース作成後に
rails sでサーバを起動しようとしたところ、以下のようなエラーが出ました。

“`
$ rails s
=> Booting Puma
=> Rails 6.0.3.3 application starting in development
=> Run `rails server –help` for more startup options
Exiting
Traceback (most recent call last):
77: from bin/rails:3:in `


76: from bin/rails:3:in `load’
          ・
          ・
          ・
Webpacker configuration file not found /Users/<ユーザー名>/<アプリ名>/config/webpacker.yml.
Please run rails webpacker:install
Error: No such file or di

元記事を表示

Postgresエラー「PG::ConnectionBad」

# 何度もつまづいたので一旦簡単にメモ

PG::ConnectionBad

could not connect to server: Connection refused Is the server running on host “localhost” (::1) and accepting TCP/IP connections on port 5432? could not connect to server: Connection refused Is the server running on host “localhost” (127.0.0.1) and accepting TCP/IP connections on port 5432?

![スクリーンショット 2020-09-10 22.17.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661441/a5dece8b-f9b2-0609-3b25-77ef6b0e8699.png)

“`
% postgres -D /u

元記事を表示

Railsでmechanizeを使ってスクレイピング

PythonでWebスクレイピングをやったことありましたが、
Railsもできるんだよねと思い立って、アプリ作る際に導入してみたい!と思いやってみたの記録になります。

今回は、その日の平均株価とかをスクレイピングします。

参考にさせていただいた記事
https://qiita.com/soehina/items/948f7f158a3a2d5be1dc

##下準備
Railsアプリの作成
gem ‘mechanize’のインストール

##View

“`Ruby:index.html.erb
<%= @values.join %>
“`

##Controller

“`Ruby:_controller.rb
require ‘mechanize’

def index
@scrps = Scrp.all
agent = Mechanize.new
@values = []
page = agent.get(“https://www.nikkei.com/markets/worldidx/chart/nk225/”)

元記事を表示

form.labelで文字をエスケープしたときの実装メモ

“`
<%= form.label :title, "件名", for: "title" %>
<%= form.text_field :title, id: "title", placeholder: "件名を入力してください" %>
“`
上記のlabelの中の件名を`件名`としたい。(bootstrapをあてる関係で)
しかし

“`
<%= form.label :title,"件名“, for: “title” %>
“`
としても意図した挙動にはならない。
これはhtmlタグが文字列として認識されてしまうから。
なので”件名“の部分だけエスケープさせたい。
エスケープで検索すると、html_safe、raw、sanitize等いくつかメソッドがあるとのこと。

(参考)

https://railsguides.jp/action_view_overview.html#sa

元記事を表示

プロフィール編集機能の実装

備忘録です!!

##新たなカラムの追加

userのアバター画像のカラムを生成します。

“`
rails g migration add_avatar_to_users avatar:string
“`

##viewの生成

プロフィール詳細画面として

“`ruby:profiles/show.html.erb
<% content_for(:title, 'プロフィール') %>

<%= t('.title') %>

<%=link_to "編集", edit_profile_path, class: 'btn btn-success float-right' %>

renderのcollectionオプションを使った繰り返し処理の省略

動作環境
Ruby 2.6.5
Rails 6.0.3.2

collectionを使うことでrenderで呼び出した部分テンプレートを繰り返し処理する場合は、省略して記述できることを学んだので、投稿してみました。

##collectionを使わない場合
“`ruby:index.html.erb
<% @hoges.each do |hoge| %>
<%= render partial: "huga", locals: {hoge: hoge} %>
<% end %>
“`
上記のコードは、部分テンプレートhugaを呼び出し、その中でhogeという変数を渡して繰り返し処理を行うというコードです。
これをcollectionを使うとどうなるのかを見てみましょう。

##collectionを使う場合
“`ruby:index.html.erb
<%= render partial: "huga", collection: @hoges %>
“`
こちらのコードは先ほどのコードと**全く同じ意味**を持ちます。3行のコードが1行で済むので、非常に楽に記述できることがわ

【Appleサブスクリプションオファー】プロモーションオファー署名の作成方法

# tl;dr

Appleのサブスクリプションオファーのプロモーションオファーに関しての情報がなかった。
**これが、日本初の資料。**

# プロモーションオファーとは

### WWDC 2019動画
https://developer.apple.com/videos/play/wwdc2019/305

### Apple公式ドキュメント
https://developer.apple.com/jp/app-store/subscriptions/#subscription-offers

![7ec9cdbd-1f10-4e9a-a5a5-c76e2c99f9ee.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268339/d3a0fc1d-b2ef-1579-ff19-e540ae5624c6.png)

>対象となるのは、そのサブスクリプションを現在利用している、または過去に利用したことがあるお客様です。
これらのオファーによって、ユーザー数の拡大や維持のため、
独自のプロモーションを

Ruby on Railsの開発環境でPostgreSQLを利用してPJを作成する

#Rails new
“`
$ rails new app-name -d postgresql
$ cd app-name
“`

app-nameは任意の名前をつける

##vs codeを開く
“`
$ code .
“`
この時点で

“`
-bash: code: command not found
“`
と怒られた方はvscodeの設定が必要

コマンドパレットを開き「shell command」
すると『Shell Command: Install ‘code’ command in PATH command.』
が表示されるので適用するとできるようになる

#データベースの作成
“`
$ rails db:create
“`

localhost:3000にアクセスするとRailsの初期画面が表示されたのでできているのではないかと思います。

(ギリ)20代の地方公務員がRailsチュートリアルに取り組みます【第6章】

##前提
・Railsチュートリアルは第4版
・今回の学習は3周目(9章以降は2周目)
・著者はProgate一通りやったぐらいの初学者
##基本方針
・読んだら分かることは端折る。
・意味がわからない用語は調べてまとめる(記事最下段・用語集)。
・理解できない内容を掘り下げる。
・演習はすべて取り組む。
・コードコピペは極力しない。

続いて第6章入りまーす。こっから第12章まで、ログインと認証システムの開発に取り掛かるそうな。長丁場ですがやりきってやりましょう。

本日の一曲はこちら。
[17歳とベルリンの壁 “プリズム”](https://www.youtube.com/watch?v=HMUCyLOfryU)
ここ数年あんまり音楽開拓してなかったけど、良い国産シューゲバンドが出てきるな〜。

 
####【6.1.1 データベースの移行 演習】
1. Railsはdb/ディレクトリの中にあるschema.rbというファイルを使っています。これはデータベースの構造 (スキーマ (schema) と呼びます) を追跡するために使われます。さて、あなたの環境にあるdb/schema.

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_