- 0.1. Rails 記事詳細リンクは、ループ内でしか機能しない?
- 0.2. Ruby on Railsのconfig設定
- 0.3. 不正な config/master.key が原因でRailsの起動に失敗するケースとその対処方法
- 0.4. SNS認証時のエラーについて
- 0.5. Rails 検索機能の実装
- 0.6. 【Ruby on Rails】Rails Tutorialを全部終えたので、追加で「ストック機能」を実装してみた
- 0.7. ページネーション機能(kaminari)
- 0.8. 汎用性◯『戻る』ボタン
- 0.9. [Docker+Rails]Railsサーバー起動失敗の対処方法
- 0.10. seeds.rbなどでActiveStorageを使って大量の画像をアップロードする際に発生する SQLite3::BusyException の対処法
- 0.11. Railsで簡単にサイトの雛形を作る
- 0.12. 初心者向け! Rails6+CircleCI+Capistrano+AWS(EC2)で自動デプロイ
- 0.13. InfiniteScrollとkaminariで無限スクロールを作る
- 0.14. データベースとモデルの関係性(基礎)
- 1. データベースに関連するファイルについて
Rails 記事詳細リンクは、ループ内でしか機能しない?
## 背景
Page#homeで記事一覧(Posts#index)を表示し、そこに記事詳細(Posts#show)をリンクを貼った。そのときに学んだ事の備忘録。## 結論
記事詳細リンクはこう貼った。(成功したコード)
“`ruby
<% if @posts.any? %><% @posts.each do |p| %>
#記事詳細のリンク↓
++<%= link_to post_path(p), class: 'text-body' do %><%= image_tag p.image.url, class: 'img-fluid' %><%= p.title %>
<%= p.tag %>
<% end %>
<% end %>
Ruby on Railsのconfig設定
この記事ではRails6.1のconfig設定をメモしています。
##config/application.rb
タイムゾーンをローカルに設定する
“`ruby
config.time_zone = ‘Tokyo’
config.active_record.default_timezone = :local
“`##config/puma.rb
developmentではlocalhost:3000、productionではunix socketを使用する
“`ruby
if ENV.fetch(“RAILS_ENV”, “development”) == ‘production’
bind “unix://#{Rails.root}/tmp/sockets/puma.sock”
else
port ENV.fetch(“PORT”) { 3000 }
end
“`##config/environments/production.rb
キャッシュにredisを使用する
“`ruby
cache_servers = %w(redis://loc
不正な config/master.key が原因でRailsの起動に失敗するケースとその対処方法
## 発生する問題
git cloneでローカルに持ってきたRailsアプリを、`rails s`や`rails c`で起動しようとすると以下のようなエラーが発生する。
“`
$ rails s
=> Booting Puma
=> Rails 6.1.0 application starting in development
=> Run `bin/rails server –help` for more startup options
Exiting
/Users/jnito/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/activesupport-6.1.0/lib/active_support/message_encryptor.rb:203:in `rescue in _decrypt’: ActiveSupport::MessageEncryptor::InvalidMessage (ActiveSupport::MessageEncryptor::InvalidMessage)
“`## エラーの原因
`c
SNS認証時のエラーについて
# 経緯
ウィザード形式のユーザー登録機能実装後、
SNS認証を追加するために
registrations_controller内に必要な記述をした。
(userモデルは記述済み。)“`ruby:controller
class Users::RegistrationsController < Devise::RegistrationsController #一部省略 def create if params[:sns_auth] == 'true' pass = Devise.friendly_token params[:user][:password] = pass params[:user][:password_confirmation] = pass end super #ここまでがSNS認証実装に追記した記述 @user = User.new(sign_up_params) #ここからウィザード形式のための記述 unles
Rails 検索機能の実装
# Rails で検索機能を実装
## View に form_tag で検索窓を設置
“`ruby
検索:
<%= form_tag(posts_path, :method => ‘get’) do %>
<%= text_field_tag :search, "", {class: "search_field_type"}%>
<%= submit_tag 'Search', :name => nil, class: “search_field_btn” %>
<% end %>“`
form_tag(posts_path, :method => ‘get’) の path の部分はクラス名によって任意に変更してください。
## Model に検索のためのメソッド search を設定
post.rb
“`ruby
def self.search(search)
if search
Post.where([“
【Ruby on Rails】Rails Tutorialを全部終えたので、追加で「ストック機能」を実装してみた
#はじめに
Railsで「qiita」のような記事をストックする機能を実装したので、その方法を備忘録としてまとめておきます。
(基本的にはいいね機能と同じやり方)※また、以下に記載する方法は前提として**「Rails tutorial」**を最後まで終えた程で記載させていただきます。
#実装すること
・記事をストックするボタンを作成する。
・記事がどれくらいストックされているか表示する。
・ストックした投稿をストック一覧ページで確認できるようにする。#Stockモデルを作成する
ストック機能を実装するにあたって、最初のステップとして`Stockモデル`を作成します。“`terminal
$ rails g model Stock
“`
カラムは2つ作成します。
・`post_id`カラム
・`user_id`カラム
マイグレーションファイルは以下のように修正します。“`ruby:xxxxxxxxxxxxx_create_stocks.rb
class CreateStocks < ActiveRecord::Migration[6.0] def chan
ページネーション機能(kaminari)
#はじめに
現在ポートフォリオ制作中の初学者です。
kaminariを導入してページネーション機能を実装したので備忘録です。#1. gemをインストール
“`Gemfile:Gemfile
gem ‘kaminari’
“`“`:ターミナル
% bundle install
“`
#2. コントローラーで定義“`ruby:events_controller.rb
def index
@events = Event.page(params[:page]).per(10)
end
“`
__pageとperいうメソッドがkaminariで定義されたメソッドです。
perメソッドの引数にどれだけのレコードが表示されたらページを増やすかを指定できます。__#3. ビューファイルを編集
“`ruby:events/index.html.erb
<%= paginate @events %>
“`
__表示したいビューファイルに記述。____以上です!__
#ページネーションの見た目を変える
kaminariで表示させるページネーションはビューの中で
汎用性◯『戻る』ボタン
#はじめに
どんなページでも使える「戻るボタン」のコードを残しておこうと思い投稿します。##汎用的戻るボタン
– Rails
– erb拡張子
– クラス名はお好みで
– CSSでクラス名を指定すれば、スタイルを適用可能“`erb
<%= link_to '戻る', :back, class:"back-btn" %>
“``:back`の部分が、戻る機能に起因しています。
[Docker+Rails]Railsサーバー起動失敗の対処方法
#はじめに
サーバー起動しようと思った時に下記エラーログが出力されます。“`
A server is already running. Check /app/tmp/pids/server.pid.
“`#原因
前回のRailsサーバー起動時に作成された`server.pid`ファイルが残っているのが原因。#解決方法
色々サイトで調べてみたところ3つ存在するはず。##①ターミナル再起動
参考:[A server is already running 対処方法【Rails】](https://qiita.com/uloruson/items/78b0d2d5c30a1f79fc02)##②server.pidファイルを削除
エラーが発生する度に、`/app/tmp/pids/server.pid`ファイルを削除する。
確実な方法ですが、面倒臭いですね…#③サーバー起動時に自動でserver.pidファイルを自動で削除する(推奨)
これが一番、楽な方法だと思います。
`docker-compose.yml`ファイルの**`command`**部分を次の通り設定す
seeds.rbなどでActiveStorageを使って大量の画像をアップロードする際に発生する SQLite3::BusyException の対処法
## 発生する問題
Railsの`rails db:seed`を実行すると、以下のようなエラーが起きる場合がある。
“`
$ rails db:seed
rails aborted!
ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked
/path-to-your-app/db/seeds.rb:69:in `‘
“`### エラーが発生するコード例
エラーが発生した周辺のコードは次のようになっている。
“`ruby
# …User.destroy_all
100.times do |n|
user = User.create!(
email: “sample-#{n}@example.com”,
password: ‘password’,
name: Faker::Name.name
)
image_url = Faker::Avatar.image(slug: user.email, size: ‘150×150
Railsで簡単にサイトの雛形を作る
# サマリ
サイトをたくさん作れるようになりたいけど、どうやろうか?という疑問が浮かんだ。
そこで、いろんなチュートリアルサイトを見たけど、Railsでつかうscaffoldという機能が便利そうだったから、その実施をやってみる。# プロジェクトの立ち上げ
## Ruby と Railsの導入
まずは、rubyとRailsをPCにセットアップする。
以下の記事を参考に実施した。(Mac)[【完全版】MacでRails環境構築する手順の全て
](https://qiita.com/kodai_0122/items/56168eaec28eb7b1b93b)
上記の記事を参考にして一通りのインストールを行う。振り返っての注意点だが、なるべく過去1年間に投稿された記事をなるべく参考にしたほうがいいと思う。
それ以上前だと、os自体のバージョンアップをまたいだりとうまく動かない可能性が出てくる。## Railsプロジェクトの実行
“`shell
$ rails new scaffold_sample
$ cd scaffold_sample
$ rails generate
初心者向け! Rails6+CircleCI+Capistrano+AWS(EC2)で自動デプロイ
#はじめに
先日、ポートフォリオ作成後、AWSにCapistranoとCircleCIを使ってCIツールによる自動デプロイを実装できたので、備忘録として残しておこうと思います。
なお、前述したとおり備忘録としてなので参考になる保証はありません。
#前提
・Railsアプリが作成できていること
・EC2にCapistranoで自動デプロイを実現できていること以上の条件に当てはまる場合にのみCIツールによるCapistranoの自動デプロイを行います。
#開発環境
##ローカル
・Rails6
・MySQL5.6.50
・Docker
・docker-compose##本番
・EC2
・RDS(MariaDB)
・Unicorn
・Nginx
・Capistrano本願環境にはDockerとdocker-composeは用いていません。
#手順
①CircleCIにEC2にログインするための秘密鍵を設定する
②.circleci/config.ymlにssh接続の記述をし、ログインできるか確かめる
③githubのmasterブランチにmergeもしくはpushし
InfiniteScrollとkaminariで無限スクロールを作る
## 完成系
![2021-01-17 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169545/800ff264-5333-dcc6-8446-736baaf7a88f.png)## 開発環境
“`
rails 6.0.2
ubuntu(wsl)
InfiniteScroll 4.0.1
“`## 事前準備
– 投稿一覧
– 投稿一覧のデモデータ
– kaminariの導入## 手順
### infinite-scrollの導入
[ここから](https://github.com/metafizzy/infinite-scroll)ダウンロードしてください。
CDNを使ってもokです。
自分は`vendor/assets/javascripts/`に置きました。(場所はどこでも良いです。)
ここの読み込む場所が違うとエラーになりました。
`//= require_tree .`の真下に置くと良いと思います。“`application.js
//= require
データベースとモデルの関係性(基礎)
データベースに関連するファイルについて
目的:エラー解決のためには、モデルファイルとマイグレーションファイルの役割の違いをしっかりと理解しないといけないと思いこの記事を書きました。
現在:ポートフォリオ作成最終段階ですが、理解できてないことがまだまだたくさんあり、基礎理解が足りていないことに気付き、基礎を固めながら仕組みから理解しているという状況です。
モデルファイルの役割
データベースへのアクセス権限を示すためのファイルです。
記述されているモデルとアソシエーション(関連付け)は、モデル通しのデータベースへのアクセス権限を示しているということになる。なぜ、このデータは取り出せないのか?を理解するためには、データーベースへのアクセス権限の記述されている、モデルファイルを見ると分かる。そして、理解への第一歩になる。
マイグレーションファイルの役割
データの内容を保管するために必要な情報を記述しているファイルです。
データを受け渡しの際は、ファイルに記
[Rails]ぱんくずリスト機能について
# はじめに
今度はぱんくず機能を実装復習しましたのでまたすぐ実装できるように
記していきたいと思います。
実装していきます。:fire::fire:
# ぱんくず機能とは
現在どこのページにいるのかを視覚的にわかりやすくした表示できる機能ことです。
物語の「ヘンゼルとグレーテル」のなかで、ヘンゼルとグレーテルの二人が森の中で道に迷わないように歩きながら来た道の目印にぱんくずを落としていったことから”ぱんくず機能”で、gemの名前が「gretel」なのだそうです。
可愛いですね :bread:
ちなみに、ヘンゼルは男の子の方でグレーテルは女の子です。:couple:
[[gem gretel] 詳細](https://rubygems.org/gems/gretel?locale=ja)
# 実装
「gretel」というgemを「Gemfile」に記述し
“`ruby:Gemfile
gem ‘gretel’
“`
インストールします。
“`ruby
bundle install
“`
こちらを入力すると「config」ディレクトリの下に「
devise とdevise token auth を共存させるポイント
“`ruby:routes.rb
Rails.application.routes.draw do
# お客様
devise_for :customers, controllers: {
sessions: ‘customers/sessions’,
passwords: ‘customers/passwords’
}
resources :companies, only: [:show, :new, :create, :index] do
# お客様登録
devise_for :customers, controllers: {
registrations: ‘customers/registrations’
}
endnamespace :api do
scope :v1 do
mount_devise_token_auth_for ‘Customer’, at: ‘customer_auth’, controllers: {
registrations: ‘
[Rails]テーブルから無作為で1つレコードが欲しい時 .sample使えた。
#課題と結論
テーブルから無作為にレコードが欲しいと思ったら普通に .sample使えました。“`irb:
irb(main):005:0> User.all.sample(1)
=> [#]
“`地味に知らなかった基礎。
#参考情報
ActiveRecord::Relationとは一体なんなのか
https://doruby.jp/users/whale/entries/ActiveRecord–Relation%E3%81%A8%E3%81%AF%E4%B8%80%E4%BD%93%E3%81%AA%E3%82%93%E3%81%AA%E3%81%AE%E3%81%8B
Railsでユーザーフォロー機能を実装する(Ajax使うよ)②
## 何をしたか
この記事は、こちらの記事の続きです。▼前回の記事
[Railsでユーザーフォロー機能を実装する(Ajax使うよ)①](https://qiita.com/tanutanu/items/a4a33554cb0e873720e9)Railsの課題を実施しています。`User`のフォロー機能を実装することになりました。
前回までの記事では、マイグレーションファイルの作成と、モデルファイルへのアソシエーションの定義が終わったので、今回は`controller`と`view`、そして**モデルメソッド**を追加していきます。なお、実行環境は以下の通りです。
– `Rails 5.2.3`
– `Ruby 2.6.0`## ゴール
今回のゴールはこんな感じです。ボタンを押すとサクサクと非同期でフォロー/フォロー解除のボタンが現れます。[![Image from Gyazo](https://i.gyazo.com/3bc3c8d87d9eb1c460d1894f6ba32783.gif)](https://gyazo.com/3bc3c8d87d9eb1c4
Railsでユーザーフォロー機能を実装する(Ajax使うよ)①
## 何をしたか
Railsの課題を実施しています。`User`のフォロー機能を実装することになりました。
この機能は前に実装したことはあって、**「確かあのアソシエーションが難しいやつ」**ぐらいには覚えていました。たまたま、この機能の実装を人に教える機会もありそうだったので、しっかり教えられるように手順を細かく記すことにしました。
ただ、かなりの長文になってしまったので前後編に分けています。この記事ではDB設計〜アソシエーションまでの話をして、続きは下記の記事になります。
[Railsでユーザーフォロー機能を実装する(Ajax使うよ)②](https://qiita.com/tanutanu/items/5f41ece86e9d2b70bae4)
なお、実行環境は以下の通りです。
– `Rails 5.2.3`
– `Ruby 2.6.0`## ゴール
今回、作るものはユーザーのフォロー機能です。ボタンを押すと、ユーザーをフォロー、もう一度ボタンを押すと、フォロー解除できます。
[![Image from Gyazo](https://i.gyazo.com/3
【エラー】`cannot load such file — mime/types/data (LoadError)`
#はじめに
payjpをGemfileに記述しbundle installs後rails sをすると大量に文字が羅列され
`cannot load such file — mime/types/data (LoadError)`
とういうエラーが出た時の解決したプロセスを記事にしました。
環境やエラーへの辿り着き方で、それぞれ違う解決方法が存在する思いますので、参考程度にしてください〜#環境
macOS Catalina バージョン 10.15.7
Homebrew 2.7.1
rbenv 1.1.2
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]
gem 3.2.4
Bundler version 2.1.4#エラー
####エラー文
`cannot load such file — mime/types/data (LoadError)`
大量に文字が羅列されたエラー分をよく確認すると`MIME: :Types`が既に定義されてるという文がありました。#確認と考察
`gem list`