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

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

PostgreSQLを利用すると、rails db:createでエラーが発生するトラブルシューティング

# 環境
Vagrant + Ubuntu 16.04.5 LTS
Rails 5.2.4.2
PostgreSQL9.5.19

# はじめに
データベースにPostgreSQLを指定して、データベースを作成しようとすると、PostgreSQLに、vagrantというロールがありませんというエラーが表示されて、Railsからデータベースが作成できません。

“`cmd
$rails new test_migrate -d postgresql
$cd test_migrate
$rails db:create

FATAL: role “vagrant” does not exist
Couldn’t create ‘test_migrate_test’ database. Please check your configuration.
rails aborted!
ActiveRecord::NoDatabaseError: FATAL: role “vagrant” does not exist
bin/rails:4:in `

Caused by:
PG

元記事を表示

【爆速実装】夢と魔法のeach文【Rails-haml】

#はじめに
TECH CAMPというプログラミング教室に45日ほど通った添野です。

昨日、教室内で「Rails-hamlを使ったフロントの爆速コーディング法」を同期に紹介したところ、大変ご好評を頂けたので、これについて記事を作成します。

#爆速コーディング
今回は「メルカリのマイページ」を模写することについて考えます。
皆さんは下記画像の要素を実装するにあたり、どのようなコードを書くでしょうか?

スクリーンショット 2020-04-02 8.22.07.png

見た瞬間「**面倒くさそう!**」と感じる方も多いと思います。
今回はこれを**爆速で実装**する方法を紹介いたします。

#結論
爆速実装の手順は下記になります。

1.コントローラに配列`@contents = [“マイページ”,”お知らせ”,”

元記事を表示

attr_accessorについて

#attr_accessorとは?
attr_accessorについて理解が不十分であったので紐解きます。
attr_accessorはデータを代入するメソッド(setter)とデータを取り出せるメソッド(getter)を同時に定義できるメソッドである。これは省略形であり、いきなり覚えようとするとかえって混乱するので一個一個分解していく。

###attr_accessor・setter/getterを使わずに定義する場合

“`

class okashi
def name = (name)  #どんな処理を行っているのか
@name = name    →   ・いわゆるsetterの部分
end             お菓子クラスに名前という情報をセット
                しますという処理。@を使用しているた
                め、メソッドの中だけでなく外でも使用できる。

def name → #どんな処理を行っているのか
@user           ・いわゆるgetterの部分
end 

元記事を表示

[Rails]refileの使い方を初心者がまとめてみた。[refile]

#はじめに
私のオリジナルサービスの画像投稿機能にrefileを使用したので、簡単にまとめておきたいと思います。
つまづいたところとかも記載しておくので、参考になれば幸いです。

#refileの導入
##gem
いくつかQiitaやブログなどで参考記事はありますが、gemをinstallできないもののいくつか見受けられました。
githubに記載されている [github/refile](https://github.com/refile/refile#1-backend)

“`ruby:Gemfile
gem “refile”, require: “refile/rails”
gem “refile-mini_magick”
“`
↑この記述方法ではbundle install できませんでした。(環境によっては変わるのか?)

なので、私はこの記事([refile使い方](https://qiita.com/salvage0707/items/2614c97a1f256027ef71))を参考にして、

“`ruby:Gemfile
gem “refile”, requ

元記事を表示

【Rails】孫モデルの数が最大の子モデルの要素を取得する方法(maximum,maxを使わず、sortで実装する)

#やりたいこと
食べログ的なサービスを作っているとして、
**いいねが最も多い投稿の画像を、お店の画像として表示したい**

#まえがき
今回やりたかったことが、Railsの`maximum`メソッドやRubyの`max`メソッドを使ってもどうしてもできなかった。(やり方あったら教えてください。)
ので、自分でメソッドを作りました。

アイデアとしては、最大のものを取ってくるというよりも、**「並べ替えて端っこを持ってくる」**ってだけです。

`sort`メソッドを使いました。
自分的に少し詰まったのでまとめておきます。
誰かの役に立てることを願って。

#状況
##機能
食べログ的なサービスを作っている。機能としては、

– お店に対して
– ユーザーが
– 画像を投稿する
– ユーザーは投稿に対していいねできる

##テーブル
|テーブル名|カラム1|カラム2|カラム3|カラム4|
|— |—|—|—|—|
|Shop|id|name|
|User|id|name|
|Post|id|user_id|shop_id|image|
|Like|id|user_i

元記事を表示

Swiper.jsが動作しなかった時の対処法[備忘録]

##はじめに
##バージョン確認の重要性
Swiper.jsはバージョンによってサポートしてくれるブラウザが違う。ver5.0以降から、IEは完全にサポート対象外になった。今回私はchromeで開発を行っているので最新版でいけると思いきや、挙動が意図したものにならなかったので、4.5.0系を使うことにした。

##便利なオプションたち

オプションが豊富で有名なSwiper.js

ここでは、私が参考にした記事を載せておくだけに留めておく。

####参考記事
実例12パターン】画像スライダーはSwiper使っておけば間違いない!実用的な使い方を紹介

【実例12パターン】画像スライダーはSwiper使っておけば間違いない!実用的な使い方を紹介


swiper.js使ってみたからそのオプションについて(v4.1.6)

swiper.js使ってみたからそのオプションについて(v4.1.6)

## 実際のコード

“`swiper.js

$(function(){
var mySwiper = new Swiper(‘.swiper-container’, {
slidesPe

元記事を表示

railsのアセットパイプラインと本番環境のデプロイについて

#アセットパイプライン
#####基本
開発者が作成したJsやCSSを最終的に統合して、HTMLソースに落とし込めるようにする仕組み。本番環境でのみ行う。

流れ
高級言語のコンパイル(cofeeやSCSS)、開発環境ではここまでしか行わない。本番環境ではここから最後までの処理を行う。

アセットの結合(複数のjsファイルをapplication.jsに統合、cssも同様)

アセット最小化(コメントや改行を無くして圧縮する)

ダイジェストの付与(これをするとファイルにハッシュ値(暗号化された値?)をつけてpublic/assets下に反映される、イメージがつかなければ参考文献をみる)

HTMLでapplication.jsとapplication.cssが読み込まれる

#####マニフェストファイル(application.jsとapplication.cssのこと)
ここに記述することはどのJsやCSSを自身に統合するか
を記述したり、別ファイルに書かれた設定を適用させる。

探索パスを設定することでファイルの統合が簡単になる.
app/asset/*とlib/as

元記事を表示

ログイン機能つけてくよ。〜Railsチュートリアル8章〜

少しづつ難しくなってきました。今回はログイン機能についてまとめてみます。
足早に来てるけどこうして一個一個確実にアウトプットしてくよ。

この章ではログイン・ログアウト機能を実装していきます。
ログインの仕組みはブラウザがログインを保持し、ユーザーによってブラウザが閉じられたら状態を破棄すること。
ログインしたユーザーだけがアクセスできるページや扱える機能を制御する。こうした制限や制御の仕組みを認可モデルという。

#セッション
HTTPは状態(state)がない(less)。つまりステートレスなプロトコルである。
HTTPによるリクエストの一つ一つはそれより前の情報を全く利用できません。
リクエストが終わると何もかも忘れてしまう健忘症的なプロトコルである。
つまりHTTP自体にはブラウザの別のページへ移動したときにユーザーのIDを保持しておく手段がない。
ユーザーログインが必要なApplicationではセッションと呼ばれる半永続的な接続をコンピュータ間に別途設定を行う。

#cookies
Railsでセッションを実装する方法として最も一般的なのはcookiesを使う方法である。c

元記事を表示

Rails ウィザード形式導入について 2

#はじめに
[Rails ウィザード形式導入について 1 はこちらをクリック願います。](https://qiita.com/raigakun/items/71cd599a0d66bf46f581)
チーム開発でフリマサイトを開発致しました。
その際、ユーザーの新規登録画面でウィザード形式を導入致しましたので、内容を整理します。
もうすでにご存知の方、省略の仕方等ご存知でしたら、ご教授願います。

#前提
– ユーザー情報(User)については 以下 **A** と記述します。
– 住所情報(Destination)については 以下 **B** と記述します。

#Aの新規登録のnewアクションとビュー
– app/controllers/users/registrations_controller.rbを見てみてください。
– えらいことになっているかと思います・・・
– なんだこれ・・・

“`app/controllers/users/registrations_controller.rb
# frozen_string_literal: true

class Users:

元記事を表示

strftimeとは?

# はじめに
新しい会社でインターンをはじめ、最初の方に回ってきた保守開発で、複数の日時を比べる機会がありました。
そこで、いろいろ調べてこのstrftimeを学んだので、アウトプットをかねて記事を書いていきます!(自分の初めてのqiita記事です)

#strftimeとは?
[rubyのstrftimeリファレンス](https://docs.ruby-lang.org/ja/latest/method/Time/i/strftime.html)は
*時刻を format 文字列に従って文字列に変換した結果を返す*
と言っています。

#そもそも日時ってどうやって取り出すの?
めっちゃいい記事を見つけたのでこちらを参照してください笑
[RubyとRailsにおけるTime, Date, DateTime, TimeWithZoneの違い](https://qiita.com/jnchito/items/cae89ee43c30f5d6fa2c)
Time.nowで現在の日時を取得できます。
`irb(main):001:0> Time.now
=> 2020-04-01 18:42

元記事を表示

AWSのRDSが日本語対応にならない場合の対処法

##はじめに
 Ruby on Rails初心者です。今回はアプリケーションのデプロイ時に苦戦した箇所があったので
 勉強のために備忘録として残したいと思います。

##前提
  Rails 5.2.4

##問題
 ・AWSのRDSでMySQLインスタンスを作成
 (RDSのMySQLの文字コードは、初期設定は「latin」)
 ・その後「パラメータグループ」で日本語対応にするも本番環境で
  日本語対応されておらず、、

##解決方法
 ・EC2にSSHで接続

“`
ssh -i /Users/ユーザー名/.ssh/キーペア名.pem ec2-user@xx.xx.xx.xx
“`
 ・EC2からRDSにアクセス(パスワード要求されます)

“`
mysql -h エンドポイント -P Port -u ユーザ名 -p データベース名
“`

 ・データベースの状態を確認

“`
mysql> show variables like ‘char%’;
“`

 ・以下のように表示される

“`
+————————–+——-

元記事を表示

データの入ったテーブルに対して外部キーが設定されたカラムを追加する

# やりたいこと

foosテーブルとbarsテーブルがあったとして
barsテーブルに`foo:references`のカラムを追加したい。
**ただし、システムは運用を始めておりbarsテーブルにはデータが入っている。**

普通に

“`rb:db/migrate/YYYYMMDDhhmmss_add_foo_to_bars.rb
class AddFooToBars < ActiveRecord::Migration[6.0] def change add_reference :bars, :foo, null: false, foreign_key: true end end ``` で`db:migrate`しようとすると、空の`foo_id`カラムが発生してしまうため、エラーになってしまう。 # 解決策 まずは初期値を設定してカラムを追加する。 default値はfoosテーブルに存在する`id`を指定する。 ```rb:db/migrate/YYYYMMDDhhmmss_add_foo_to_bars.rb class AddFooToBars

元記事を表示

Strong Parametersでネストする場合の注意点

“`ruby
params = {
title: “タイトル”,
content: {
header: “見出し”,
body: “内容”
},
author: “太郎”
}
“`

みたいなパラメータをpermitしてあげるときこの順番通りに実装しようとすると

“`ruby
params.permit(:title, content: [:header, :body], :author)
“`

となるが、これだとsyntax errorになる
理由はネストする場合はそのネストするパラメータを最後に持ってこないといけないため。
正解はこれ

“`ruby
params.permit(:title, :author, content: [:header, :body])
“`

元記事を表示

ActiveModelSerializer + #Rails の Controller render で json /. json_api の adapter を無効化してデフォルト設定を使う ( disable json adapter and reset to default )

– デフォルトのアダプタはattributes のようだ。これを指定すれば良い。
– config でデフォルトが指定されており、一箇所の controller でだけ adapter を変えて戻したい場合などに

“`rb
render json: some_instance, adapter: :attributes
“`

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/3058

元記事を表示

Railsでlink_to deleteメソッドが動かない

rails5.2を使ってアプリを実装中にハマったエラーです。
なかなか解決策が見つからず困ったのでメモとして置いておきます。

# 状況
rootテーブルに投稿されたレコードを削除するため、実装したが削除されない。
リンクは表示されてクリックできるけどアクションが発火しない。加えてエラーも出ない。
ログを見るとGETで送られている。

“`
<%= link_to '削除', "#{@root.id}", method: :delete %>
“`

基本的な確認はしてみた。
route.rb、controllerの記述はちゃんとできてる。
rails routesを確認して、HTTPメソッドは来ている。htmlもdeleteになっている。

“`
route.rb
resources :roots

roots_controller.rb
def destroy
root= Root.find(params[:id])
root.destroy
redirect_to root_path
end
“`

# 試したこと
applicatio

元記事を表示

#Rails / ActiveRecord / 複数形の validates メソッドと 単数形の validate メソッドの違いは? 前者が標準のvalidatorで後者がカスタムのvalidator。

びっくりするぐらい分かりにくいが、きっと命名的に苦慮の末だったのだろう。

# validates (標準)

おなじみのやつ。

![image](https://user-images.githubusercontent.com/13635059/77970201-91c85c00-7326-11ea-86e2-25e2c63c85b0.png)

# validate (カスタム)

こちらは自分でModelにメソッドを作って、ちっちゃなカスタムバリデーターを作る。

[Active Record Validations — Ruby on Rails Guides](https://guides.rubyonrails.org/active_record_validations.html#custom-methods)

![image](https://user-images.githubusercontent.com/13635059/77970138-647bae00-7326-11ea-888e-62d589810171.png)

# Original by Gi

元記事を表示

Library not loaded: libssl.1.1.dylib (LoadError) 発生時の解決方法

#状況

macOS catalina で railsアプリの開発環境を整え終わって、
Windows10環境で開発してたWebアプリをクローンし、いざ`rails server`実行だ!
と意気込んでいたら、見た事のないエラーに困惑…

解決はできたものの、いろいろと調べたら闇が深そうだったので、
自分用にメモを残しておきます。

ついでに同じエラーに悩む方の助けになれば幸いです!

###エラー内容
“`zsh:zsh
dlopen(/Users/kirimaro/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle, 9): Library not loaded: libssl.1.1.dylib (LoadError)
Referenced from: /Users/kirimaro/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle
R

元記事を表示

【Rails】HerokuでAWS s3に画像をアップロードしようとしたらAccess Denied

#事前準備
[Railsでcarrierwaveを使ってAWS S3に画像をアップロードする手順を画像付きで説明する](https://qiita.com/junara/items/1899f23c091bcee3b058#iam%E8%A8%AD%E5%AE%9A)

概要についてはこちらの記事がとても分かりやすかったので参考にさせていただきました。

ただしこのまま`$ git push`すると、アクセスキーがアップロードされてしまうので注意です。
アクセスキーの隠し方については、`heroku 環境変数`とか`gem ‘dotenv-rails’`、`$ heroku config:set ACCESS_KEY=aaaaaa`とか調べると出てくると思います。

#この記事を読むべき人

1. https://myapp.herokuapp.com で画像をs3にアップロードしようとしてもうまくいかない
1. `$ heroku logs`したら`Access Denied`って言われる

この状況の人にはお役に立てるかもしれません。

#手順

元記事を表示

deviseに新しいカラムを追加したけどviewsに表示されない

deviseで作ったusersテーブルに新しくnameカラムを追加、新規登録画面にnameを入れるフィールドを作ったが、なぜかviewsで表示されない問題が解決したので備忘録も兼ねて記事に致します。この記事で少しでも参考になれば幸いです。

結論から申し上げますと、i18nを使うためにはi18n化されたviewsファイルでなきゃ駄目なようです

①自分はdeviseのviewsファイルを作成する際に以下コマンドで作成しました。
“rails g devise:views users“

②そして日本語化もしたかったのでlocaleファイルも作成
“`rails g devise:i18n:locale ja“`

①のコマンドではviewsファイルがi18n化されておらず②と噛み合っていなかったことで、nameフィールドがviewsに表示されなかったと思われます。なので①のファイルを作り直しました。

“rails g devise:i18n:views users“

以後、無事にviewsに表示されてめでたしめでたし。

元記事を表示

docker上でRailsアプリを動かす際に、localhostでアクセスするためのオプション

# はじめに

学習環境を用意するにおいて、コンテナ上に開発環境が用意できることで、

・ホストPCを汚すことなく環境を構築できる
・異なるPC間で同じ環境を使いまわせる
・格好いいと感じる

といった理由からRailsアプリをコンテナ上で作って動かしてみましたが、ホストからの動作確認で引っかかったのでメモします。
※動かしたのはscaffoldレベルのアプリです

# 先にまとめ

先に問題と解決をまとめて書いておきます

– 問題
– コンテナ内で起動したRailsアプリにホストからアクセスできない
– 解決方法
– Railsアプリを立ち上げる際に、`-b 0.0.0.0`をオプションとしてつける

## 以下、やったこと

まとめにたどり着くまでの状況をつらつらと

### 準備

ポートフォワードの設定をしてコンテナを立ち上げる

“`
(ホスト)$ docker container run -it -p 30000:3000 /bin/bash
“`

コンテナ内でアプリを作る

“`
(コンテナ)# rails new scaffold_sample
(コ

元記事を表示

OTHERカテゴリの最新記事