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

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

フォロー・フォロワー機能

Rails5使用の、フォロー・フォロワー機能についてのまとめです。

UserとBookを作成しており、
1対多 となっています。

modelとcontrollerの作成

rails g controller Relationships
rails g model relationchip follower_id:integer foolowed_id:integert
カラム確認後
rails db:migrate

※ follower する
  followed される

モデルのアソシエーション

“`model:relationship.rb
belongs_to :follower, class_name: “User”
belongs_to :followed, class_name: “User”
“`

class_name: 関連先のモデル参照する際の名前の変更

“`ruby:user.rb
has_many :relationships,class_name: “Relationship”, foreig

元記事を表示

Herokuデプロイ奮闘記(後編)

これは、度重なるエラーに苦戦しながらも初めてのHerokuデプロイに成功した、ある一人の男の物語である。

# 結論(デプロイまでの過程)
1. Rubyの**3.0.1**をインストールしてバージョン変更。
2. 更にRubyの**2.7.3**をインストールしてもう一度バージョン変更。Bundlerの**2.2.17**をインストールしてこっちもバージョン変更。
3. 更にBundlerの**2.2.16**をインストールしてこっちももう一度バージョン変更(Heroku環境に合わせるため)。このバージョンで`bundle install`。
4. BundlerをPCの環境に合わせるために、コマンド`bundle lock –add-platform x86_64-linux`を実行。
5. **devise**と**kaminari**の各Gemを開発・テスト・本番の全ての環境で使えるようにする。
6. *config/environments/production.rb*の`config.assets.js_compressor = :uglifier`の行をコメントアウ

元記事を表示

bin/rails app:update で routes.rb をキレイに上書きしてしまった話

# 概要
– Rails を 6.0.0 から 6.1.3 にバージョンアップしようとしていた
– “bin/rails app:update“ を実行し、出てくるプロンプトを脳死で全て Y で許可した
– 結果、config/routes.rb をまっさらなものに上書きしてしまった

# 参考記事
– [How to Upgrade Rails app](https://redgreenrepeat.com/2020/07/03/how-to-upgrade-rails-app/)

“Warning, there can be breaking changes to your application if you accept all changes suggested. (i.e. getting a new clean routes.rb file.)
Be careful with your choices!”

この記事はこの 2 文に尽きます。

# 詳細
Rails をバージョンアップする際に config 周辺のファイルの更新をしようと“bin/rails

元記事を表示

Rubyの例外とは?例外処理の流れ(未経験エンジニアにおすすめ)

# はじめに

例外処理について学ぶタイミングってなかなかないですよね〜。
とはいえ、実務になると普通によく遭遇します。
ということで、これからエンジニアになりたい人、エンジニアになりたての人に向けて、例外とは何かというところから丁寧に解説した記事です。
ぜひご覧ください。

#そもそも例外とは
プログラミングにおいていわゆるエラーと呼ばれるものには2種類あります。

1つは、シンプルに**エラー**。もう一つは**バグ**。
この二つの違いは以下です。

□エラー → 開発者が想定していなかったエラー
□バグ → 開発者が認識しているエラー

※エラーには構文(Syntax)エラーと論理エラーがありますが、ここでは詳細を割愛します。

前提として、開発者はバグを治す必要があります。
そこで、「ここでエラーが起こるかもしれないなぁ」と思う箇所に、エラーが発生した場合の対処法をコードに落とし込んでおいたり、エラーメッセージをログに残すことで、開発者がエラーの改修をすばやく行うことができるようになります。
それこそが、**例外処理**であり、そのエラーが発生した時の情報をログで残しつつ、救

元記事を表示

RailsでPOSTしようとした時のActionController::InvalidAuthenticityTokenエラー

##Rails4 – 解決法

“`/app/assets/controllers/application_controller.rb
class ApplicationController < ActionController::Base # protect_from_forgery with: :exception end ``` protect_from_forgery with: :exception をコメントアウトする ##Rails5.2以上 - 解決法1 ```/app/assets/controllers/application_controller.rb class ApplicationController < ActionController::Base skip_before_action :verify_authenticity_token, raise: false end ``` skip_before_action :verify_authenticity_token, raise: false を追記する ##Rails5.2以

元記事を表示

ログインの有無で条件指定

# authenticate_user!
コントローラーのクラスの下に定義し、ログインしていないユーザーが行えるアクションを制限する。

“`○○_controller.rb
before_action :authenticate_user!, only: [:index, :create]
“`
# only
指定するアクションのみ

#except
指定するアクション以外
# 終わり
ログイン状態の有無をIF文で定義しようとして時間を使ってしまいました。
authenticate_user!備忘録

元記事を表示

docker-compose buildで詰まった

#エラー

以下のエラーが出た。

“`
$ docker-compose build
db uses an image, skipping
test-db uses an image, skipping
chrome uses an image, skipping
Building app
Traceback (most recent call last):
File “site-packages/docker/utils/build.py”, line 97, in create_archive
File “tarfile.py”, line 1970, in addfile
File “tarfile.py”, line 250, in copyfileobj
File “tempfile.py”, line 481, in func_wrapper
OSError: [Errno 28] No space left on device

During handling of the above exception, another exception occu

元記事を表示

mimemagic -v0.3.2がbundle installに失敗する理由と解決法

# なにこれ

mimemagicがrubygems.orgから取り下げられたせいで、
mimemagicのbundle installが失敗するようになった問題の理解と解決方法を備忘録として書く。

# なぜbundle installが失敗するか

↓のようにmimemagic -v0.3.2を書いてる`Gemfile.lock`があるとします。

“`Gemfile.lock
…略
mimemagic (0.3.2)
…略
“`

`bundle install`する時の挙動は、
GemfileとGemfile.lockを見て、
欲しいgemがGemfile.lockに記載されてれば該当のversionをinstallしようとする。
(上の例だとv0.3.2)

ただ、mimemagicはv0..3.2がrubygemsに存在しない。
なので、`bundle install`が失敗する。

# 解決策
↓のように、rubygemsに存在するversionをinstallするようにする。

“`Gemfile.lock
…略
mimemagic (0.3.10

元記事を表示

テックキャンプで未経験から自社開発企業へ内定をもらうまでのお話

#はじめに
2020年11月から学習を開始して、内定をもらえるまでの道のりをこちらの記事でまとめていきます。できる限り皆様に有益な情報となるようにまとめましたので、よろしければご覧ください

| 章 | 内容 |
| —- | —- |
| 私のスペック | 簡単な自己紹介を載せています |
| 学習開始〜内定までに行ったこと | 学習を始めてから行ったことの内容を
時系列順にまとめています |
| ポートフォリオについて | ポートフォリオの詳細について機能紹介や
インフラ構成図等を載せています |
| テックキャンプについて | テックキャンプについて詳細です。
回し者ではない感想をご覧ください |
| 転職活動について | 転職活動の実績や内容をまとめています。 |
|その他差別化戦略|私がしていた未経験エンジニアの差別化戦略をご紹介します。|

#私のスペック

– 旧帝大理系出身
– 社会人2年目(1年働いて退職)
– 前職が某鉄道会社の社内システム担当(エンジニアとは程遠い)
– 大学時代にプ

元記事を表示

[Ruby on Rails] ログインしていないユーザーが「1度だけ」いいねを押せる機能の実装

# はじめに

今回ポートフォリオ制作で、
日本各地の名所を投稿できるサイトを制作しました。

実際に製作したサイトと、コード(GitHub)は下記のURLからご覧ください。
・サイトURL : https://japansiteinfo.com (今後予告なく公開停止する場合があります。ご了承ください。)
・GitHubのURL : https://github.com/yuta-pharmacy2359/dwc_JapanSiteInfo_app

その中で、特に「ログインしていないユーザーが「1度だけ」いいねを押せる機能」で苦戦しましたので、
今回ご紹介させていただきたいと思います。

# 本題

### 1.背景

投稿サイトのみならず、Webアプリケーションではもはや欠かせない機能となっている「いいね機能」。
「ログインユーザーがいいねを押す機能」であればネットで沢山の検索結果が出てくると思います。

通常、投稿ID: 1 の投稿にいいねを押した場合、
その情報はDBに以下のように登録されます。

| いいねID | 投稿ID | (いいねを押した)ユーザーID |
|:-

元記事を表示

【Rails】データ保存時にrollbackされて原因がわからない時

Railsで開発している時に、データ保存をしたはずなのに、rollebackされてその原因が分からないことがあるかと思います。
私の場合、createメソッドでsaveしている状況ですが、パラメータは正しく渡っており、エラーメッセージも表示されていないのにデータベースには保存されていませんでした。

結論としては、save!と入力することでエラーの原因が分かります。
やり方としては、現在のcreateアクションに記載されているsaveに!を付けるだけです。

“`ruby:item_controller.rb
def create
@item = Item.new(items_params)
if @item.save
flash[:success] = “商品を登録しました”
redirect_to items_path
else
flash.now[:danger] = “登録に失敗しました”
render(“admin/items/new”)
end
end
“`
上記は新規商品

元記事を表示

M1macでのRubyonRails環境構築【初学者向け】

#概要
今までWindwsPCでRialsを勉強していましたが、今回M1チップのMacbookAirを購入しました。
環境構築に大変苦慮したため、成功までの手順を残しておきます。

Qiitaの記事を参考に色々頑張りましたが、`msgpack`や`nokogiri`などgem周りのエラーが頻出し、なかなかはうまくいきませんでした。
最終的に一度**mac自体を初期化**し、**OSをアップデート**後に以下URLの手順を参考にすることで、無事`Rials s`まで辿り着きました。
>参考にしたサイト:https://github.com/osmszk/m1-mac-rails-install

**マシンスペック**
・macOS:BigSur ver.11.4
・チップ:Apple M1

#目次

– 環境確認と事前準備
– PATHの確認
– ruby,rails,rbenvの確認
– Command Line Toolsをインストール
– homebrewをインストール
– rbenvをインストール
– rubyをインストール
– railsをインストー

元記事を表示

【Rails】閲覧履歴の降順表示+定時削除を実装する

ポートフォリオ作成時に閲覧履歴機能を実装したのですが、色々詰まったところがあったので整理しておきたいと思います。

この記事では、以下をまとめていきます:
1. 閲覧履歴機能の実装(モデルに記述)
2. 閲覧履歴が降順で表示されるように調整(コントローラーとビューに記述)
3. 1ヶ月以上前の閲覧履歴が定時で削除されるようにする(バッチ処理)

## 前提
#### 機能としては・・・
– 複数のユーザー(会員登録・ログイン済)がレシピを投稿でき、自分や他者が投稿したレシピを閲覧できる
– ユーザーがログイン済の場合、閲覧履歴が記録され、マイページから自分の閲覧履歴を確認できる
– 閲覧履歴は降順で表示される(閲覧順:新→古)
– 1ヶ月経った閲覧履歴は定時削除される

### モデル & コントローラー
以上の機能を実装するために、以下の構成で進めていきます。
なお、PFでレシピ投稿サイトを作成したのでPostRecipeということにしていますが、ArticleやBookなど別の投稿内容に置き換えていただければと思います。

– MODEL
– User(会員)

元記事を表示

rails コメント機能実装

#①コメントを記録するモデルを作成しよう

“`
rails g model post_comment comment:text user_id:integer book_id:integer
“`

#②マイグレートしてテーブルをデータベースに登録する。
“`
rails db:migrate
“`

#③アソシエーションで関連付けを行う

“`PostComment.rb
class PostComment < ApplicationRecord belongs_to :user belongs_to :book end ``` ```user.rb class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerabl

元記事を表示

いいね機能を入れよう rails中心

リレーション関係を確認しよう

![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1514036/3049a133-83b7-3821-17ad-1f578088156d.png)

#①モデル(テーブルを作成しよう)

“`
rails g model favorite user_id:integer recipe_id:integer
“`

#②マイグレートしてテーブルをデータベースに登録する。

“`
rails db:migrate
“`

#③アソシエーション(テーブル同士の関連付け)
上記の図の線を書いていこう

“`:favorite.rb
class Favorite < ApplicationRecord #1人のユーザーに属している belongs_to :user #1人の投稿に属している belongs_to :book validates_uniqueness_of :book_id, scope: :user_id end

元記事を表示

javaにrailsの変数を持たせるには

今回オリジナルアプリの作成で、railsの変数をjavaで使えないかと調べて実装できたのでここに記録。

結論から言うとgemを入れたら簡単に実装できた。

まず、使用するのはgonと言うgem

gemfileに gem”gon”と記載

ターミナルにbundle install

その後application.heml.erbのhead内に<%= include_gon %>と書くことでgonを読み取れるように

次に使用したいcontrollerの変数をjavaで使えるように
  @movie = Movie.find(params[:id])
gon.movie = @movie
変数@movieにgonを加える

あとはjsで変数を使えるように
今回はアラートを用いてアラートの内容に変数を用いたいため以下の記述
alert(`正解は[${gon.movie.phrase}]です`);

元記事を表示

AWSのEC2上に環境変数を設定する方法

# 環境
macOS: Big Sur Ver11.2.3
Rails: 6.1.1
Ruby: 2.6.5
インフラ:AWS(EC2)
Webサーバ:Unicorn

# 困っていること
AWSのEC2を使ってポートフォリオをデプロイし、さらにACMで証明書取得, Route53でドメイン取得後、SSL化まで行ったところ、Googleマップが表示されなくなった。
ブラウザのコンソールを確認すると「Google Maps JavaScript API error: InvalidKeyMapError」と表示されている。
したがって、APIキーをEC2上で設定できていないのではと推測。

# 解決方法
### ①EC2にSSHで接続し、Vimを開く
“`terminal
% cd .ssh
% SSH接続のコマンド(ssh -i hoge.pem ec2-user@アプリのIPアドレス)

接続後、
[ec2-user@ip-172-31-0-160 ~]$ sudo vim /etc/environment
“`

### ②環境変数を記述する
内容を変更するには「i」を押して編

元記事を表示

micropostのカウント備忘録

###解決したい問題
投稿したmicropostの数をカウントしたいがエラーが起きる。ちなみに、user.controllerでは正常に使えているよう。

###コード
全てのコントローラでmicropostのカウントメソッドを使うことができるよう、application.controllerに書いている。

“`application.controller
class ApplicationController < ActionController::Base include SessionsHelper private def require_user_logged_in unless logged_in? redirect_to login_url end end def counts(user) @count_microposts = user.microposts.count end end ``` micropostのindexでmicropostカウントメソッドを使いたいのでinde

元記事を表示

お気に入り登録を実装(非同期通信)

現在RubyとJavaScriptを用いて記事投稿サイトを作成しています。
今回は**非同期通信のお気に入り登録**を実装します。
お気に入り記事一覧ページの実装までを書いていきたいと思います。

■仕様等
・お気に入りアイコンをクリックで登録/解除
・jQueryを使用しない

###■完成後の動作
[![Image from Gyazo](https://i.gyazo.com/3a294759ebd11a6fc8f7a3aaae93581b.gif)](https://gyazo.com/3a294759ebd11a6fc8f7a3aaae93581b)

###■お気に入り機能
####①Userモデルにお気に入り操作に関するメソッドを記述
bookmarkモデル、コントローラーを作成した後、
お気に入り操作に関するメソッドをuserモデルに追記していきます。
※bookmarksテーブルのカラムはuser_idとarticle_idです。

“`Ruby:user.rb
has_many :bookmarks_articles, through: :boo

元記事を表示

【備忘録】AWS Cloud9を用いたIDE環境構築

#はじめに
Ruby on Railsチュートリアルの環境構築編その1です。
AWS Cloud9を用いたIDE環境構築の流れをメモしておきます。
今回はAWSにログインし、チュートリアルを実行するためのワークスペースを作成するまでの手順を記録します。

#大まかな流れ
1. AWSのアカウントを作成し、ログインする。
アカウント作成時には、メールアドレスの他に、住所やクレジットカードの情報を入力する必要があります。
アカウント作成後、ルートユーザーでログインします。

2. チュートリアルを実行するワークスペースを作成する。
AWSマネジメントコンソールの検索窓に”Cloud9″と入力して検索、Cloud9のサービスを選択する。
Cloud9のトップページの右上の”Create environment”をクリックする。
以下の箇所を変更する。各stepで該当箇所を変更したら、”Next step”をクリックする。
・step1「Name environment」のName欄に、ワークスペースの名前をつける。
・st

元記事を表示

OTHERカテゴリの最新記事