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

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

【Rails】コメント機能(登録・表示・削除)

投稿に対するコメント機能実装の備忘録。

# ゴール
– Userテーブル、Postテーブルに紐付く、Comentテーブル(中間テーブル)でコメントを管理。
– Comentテーブルは、コメント内容、コメントしたpost_id、コメント投稿者user_idカラムを設置。
– (前提) ユーザー機能は、devise を使用。

# 実装
## コメントモデルとテーブル作成
– コメントモデルとテーブル(コメント内容、コメント投稿者)を作成

“`rb:ターミナル
% rails g model Comment comment_text:text user:references post:references
% rails g controller Comments
% rails db:migrate
“`
モデルにアソシエーション追加。

“`rb:Commentモデル
belongs_to :post # Comment.post で、コメントされた投稿取得
belongs_to :user # Comment.user で、コメント投稿者取得
“`

元記事を表示

railsのpathメソッドとurlメソッド

##pathメソッド
相対パス

“`
root_path => ‘/’
“`

##urlメソッド
絶対パス

“`
root_url => ‘http://www.example.com/’ ※完全なURLの文字列を返す
“`

元記事を表示

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

##基本方針
・読んだら分かることは端折る。
・意味がわからない用語は調べてまとめる(記事最下段・用語集)。
・理解できない内容を掘り下げる。
・演習はすべて取り組む。
・コードコピペは極力しない。

ではゴーゴー。 
##全体の流れ
第1章では、最初の「hello_app」を作成〜Gitを使ってバージョン管理〜本番環境にデプロイまで実施。
第2章では、scaffoldを使ってコードを自動生成し、「toy_app」を作成。
第3章から最後の14章まで、twitter風の「sample_app」をゼロから作成します。

チュートリアルとはいえ、前提となるプログラミング関連の知識が全くない状態では厳しいので、[Progate](https://prog-8.com/)の関連するコースはやっておこう(有料)。

[Railsチュートリアルと関連しているProgateのコース]
・第1章
 コマンドライン
 Git
・第4章
 Ruby
・第5章
 HTML & CSS
 Sass
・第14章
 jQuery
 JavaScript
 SQL
 Railsの基礎
 Ruby on Rails

元記事を表示

検索機能の実装

備忘録です!!

##ransackをインストール

“`
gem ‘ransack’
“`

bundle installしてください。

##コントローラーの設定

今回は、掲示板の投稿一覧、ブックマーク一覧の検索機能を実装していきます。

“`ruby:board_controller.rb
def index
@search = Board.ransack(params[:q])
@board = @search.result(distinct: true).includes(:user).order(created_at: :desc).page(params[:page])
end

def bookmarks
@saerch = current_user.bookmark_boards.ransack(params[:q])
@bookmark_board = @search.result(distinct: true).includes(:user).order(created_at: :desc).page(params[:page])
end

元記事を表示

git push origin master が出来ない

# Git Hubに上げられない
新しくアプリを作りGit Hubに上げられず、エラーでかなり困りました。
なんとか解決をしたので、忘れないように備忘録として書きます。

新しくrailsでアプリを作り、リモートリポジトリにあげよう下記のコマンド打ち

“`
$ git remote add origin 新しく作ったリポジトリのコピーしたURL

$ git remote
origin
“`
ここでoriginと出力され

それでは紐づけが完了したので、ローカルリポジトリの現状の情報を、リモートリポジトリに反映

### git push

ローカルリポジトリでのコミットをリモートリポジトリ(origin)に反映させる

“`
$ git push origin master #リモートリポジトリ(origin)に情報を反映
“`
ここでエラー

“`
error: src refspec master does not match any
error: failed to push some refs to ‘https://〜’
“`
解決した方法は git secr

元記事を表示

データベースに存在しないIDがURLに入力された場合の処理

データベースに登録されるデータにはプライマリキーのIDが付けられますが、そのデータを削除した場合はそのIDも存在しなくなります。
商品の詳細ページや会員の詳細ページのURLには`:id`があり、この数値を変更することでその数値のIDに該当する詳細ページが表示されますが、もし、存在しないIDが入力された場合には

“`
ActiveRecord::RecordNotFound
Couldn’t find モデル名 with ‘id’=入力された数値
“`

というエラーが発生します。

今回行う処理は「存在するIDなら表示し、存在しなければリダイレクトを行う」という物です。

## 環境
Ruby 2.5.7
Rails 5.2.4

## 処理の手順
今回はapplication_controllerにアクションを定義し、リダイレクトさせたい各コントローラーでそのアクションをbefor_actionとして設定する方法で進めていきます。
状況としては商品の詳細ページでURLに商品IDを入力した時の処理と仮定します。

“`ruby:application_controller.rb

元記事を表示

削除機能の実装(foreign_keyを持つ場合)

##概要
Railsで外部キーを持ったモデルを削除する際、単純にルーティングとコントローラーとビューファイルを記述しただけでは実装できず苦しんだのでアウトプットしておきます。

##実装内容
外部キーとして、商品購入に関してデータを結びつけているitem_purchaseを持ったitemというモデルを削除するとします。

このitem_purchaseは、購入した人であるuser_idと、購入された商品であるitem_idを持っています。

ここで、単純にitemを削除すると、item_purchaseにはitem_idだけなくなってしまったレコードが存在してしまいます。

そこで、itemを削除したときにその関連したitem_purchaseのレコードそのものを削除できるように記述していきます。

##実装

まずはモデルのアソシエーションに追加記述しましょう。

“`ruby:models/item.rb
has_one :item_purchase, foreign_key: :item_id, dependent: :destroy
“`

“`ruby:models/i

元記事を表示

【Ruby on Rails】gemのdeviseを使用し、名前とパスワードのみでログインする方法

# 目標
![画面収録 2020-09-01 22.17.23.mov.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700999/4fedaa4a-1510-7a49-4675-22b845a7280d.gif)
# 開発環境
ruby 2.5.7
Rails 5.2.4.3
OS: macOS Catalina
# 前提
homesコントローラーを作成し、以下を記述済。

“`:config/routes.rb
root ‘homes#top’
get ‘mypage’, to: ‘homes#mypage’
“`
“`:app/controllers/homes_controller.rb
class HomesController < ApplicationController def top end def mypage end end ``` # 1,deviseをインストールする Gemfileの最後に、以下を追加。 ```:Gemfile gem 'devise'

元記事を表示

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

著者の現ステータスはタイトルどおり。
自分の置かれている状況を再確認し、自分の目標を明確にするために、まずは自分語りから始めるよ!!!

##【前提】
・これはRailsチュートリアル(第4版)を進める際の個人的なアウトプットメモです。
・著者は全くの初学者です。タイトルから分かるとおり、現職は全く関係ない職種(IT・Webとは正反対と言っていいかも)で、大学等も全く関係ない学部を卒業しています。間違い・不適切な内容があってもご容赦ください。
・初学者といいつつ、[こちら](https://ryosukemizuta.com/rails_tutorial/#2)の記事を参考に、Progateは一通り学習し、本チュートリアルもすでに2周しています(教えに従い9~14章は2周目からチャレンジ)。でも、正直全然理解できていない…テスト書ける気しない……な状態です。
・3周目となる今回は、過去2周で理解できなかった部分を掘り下げていきながら、極力自分の手と頭を使って取り組んでいきます。IT・Web等の情報技術の用語にも疎いので、都度都度調べながら進めていきます。

##なぜRailsチュートリ

元記事を表示

git pushの指定先を変更する方法

##チーム開発用

チーム開発用に順番に説明していきます。

####①今まで使っていたgithubのリポジトリをコピー

![スクリーンショット 2020-09-01 22.06.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625856/50d56592-c7e0-89f3-e921-0956e3b42c7b.png)

“`
$ git clone コピーしたurl
“`

何もブランチを指定しなければmasterブランチがcloneされます。
branchを指定してcloneしたければ以下のコマンド

“`
$ git clone -b クローンしたいブランチ名 コピーしたurl
“`

####②クローンできたらディレクトリを移動しコマンドでpush先を確認

“`
$ git remote -v
“`

####③push先が今井さんのリポジトリになっているので変更
![スクリーンショット 2020-09-01 22.12.35.png](https://qiita-im

元記事を表示

Heroku上のRailsアプリにNewRelicを導入する

## 導入方法
### アドオンを追加
– HerokuのダッシュボードからNewRelicアドオンをProvision
– コマンドラインから行う場合は`$heroku addons:create newrelic:wayne`

この時点で`NewRelicアカウントの作成`、`各種環境変数のセット`が自動で行われています。

### 設定方法が記載されている画面に移動
– アドオン一覧画面からNewRelicをクリックし、NewRelicのサイトに移動
– コマンドラインから行う場合は`$ heroku addons:open newrelic`
– `Get Started`をクリック
![new_relic_top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244893/c7d0ca08-2266-6d88-b7cb-4fb6bf4489a4.png)
– `Ruby`をクリック
![ 2020-09-01 20.38.40.png](https://qiita-image

元記事を表示

【Rails】フォーム内で、異なるモデルのデータを送信したい

1:1の関係のモデル同士を関連づけ、フォームにそれぞれのモデルデータを同時に送信できるようにしたい。
つまり、formメソッド内で、2つのデータモデルを扱えるようにするのが今回の目的になります。

今回は、UserモデルとUser_profileモデルを1:1の関係性にして、formメソッド内でどちらのユーザー情報も同時に編集できるようにします。

#M

“`ruby:マイグレーションファイル
class CreateUserProfiles < ActiveRecord::Migration[6.0] def change create_table :user_profile do |t| t.string :twitter_url t.string :program_lang t.string :image t.references :user, foreign_key: true t.timestamps end end end ``` `t.references :user, foreig

元記事を表示

included do

#初めに
moduleの下のextendの下のincluded doが分からないので調べた
#included doとは
included do~endというブロック。
このブロックの中にメソッドを定義しておくとモジュールがincludeされたあとににそのメソッドが動作する。
extend ActiveSupport::Concernとセットで使われる。

元記事を表示

Railsアプリを作成する!ってなったら

#はじめに
某プログラミングスクールで勉強した内容を備忘録として残します。

#環境
*macOS Catalina : 10.15.6
*Ruby : 2.5.1p57
*Rails : 5.2.4.3

#目的
railsアプリの雛形を作成すること
Gitの管理下に置く
諸々の設定をする

#もくじ
1. アプリケーションを立ち上げる
2. GitHubで管理できるようにする
3. 諸々の設定

##1. アプリケーションを立ち上げる

####①アプリを作成する
以下のコマンドを実行する。

“`
$ cd ~/projects # projectsディレクトリに移動
$ rails _5.2.4.3_ new “<アプリケーション名>” -d mysql # mysqlオプションを付けて新たにアプリケーションを作成
$ cd <アプリケーション名> # 作成したアプリケーションのディレクトリに移動
$ pwd # 作成したアプリのディレクトリにいることを確認
“`
※もしアプリケーション作成段階でエラーが出た場合は、以下のような赤字の文章が表示される。

“`
I

元記事を表示

jQueryが導入できないRuby on rails バージョン6.0.0の人に告ぐ、、瞬速jQuery導入法

ども、

今回はAjaxが導入できない人や、
ドロワーなどを実装しようとして記事丸コピしたが、
何故かできない人に向け、

基本に立ち返り、jQuery ほんんんとに導入できているか問題を解消スべく
この記事を書かせてもらいたいと思います。

この番組は

“`
ruby ‘2.6.5’

# Bundle edge Rails instead: gem ‘rails’, github: ‘rails/rails’
gem ‘rails’, ‘~> 6.0.0’
# Use mysql as the database for Active Record
gem ‘mysql2’, ‘>= 0.4.4’
# Use Puma as the app server
gem ‘puma’, ‘~> 3.11’
# Use SCSS for stylesheets
gem ‘sass-rails’, ‘~> 5’
# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacke

元記事を表示

link_toメソッドにparamsを持たせる方法

##環境
– ruby 2.6.5
– rails 6.0.0
– capistrano 3.14.1
– AWS(EC2)
– Web Server Nginx
– Application Server Unicorn

##実装したいこと
`link_to`メソッドにparamsを持たせる。

##設定
`link_to`メソッドのパスに引数として渡したいものを記述する。

“`ruby:index.html.erb

  • <%= link_to "ALL", root_path, class:"gender" %>
  • <%= link_to "MEN", search_posts_path(gender_id: 2), class:"gender" %>
  • <%= link_to "WOMEN", search_posts_path(gender_id: 3), class:"gender" %>

“`

元記事を表示

【RSpec】【実践的】使えるテクニック・知識。

# はじめに
自分はRSpecについての理解が全然ない状態で勉強してある程度は使えるようになりました!
初心者なりに実践的な使い方やコツをまとめてみたのでよかったらご覧ください。

## テクニック・知識集

####TDDとは
テスト駆動開発(Test-Driven Development)の略で、テストファーストなプログラムの開発手法のこと。
少しわかりやすく言うと、プログラムの実装前にテストコードを書き、そのテストコードに適合するように実装とリファクタリングを進めていく方法です。

####is_expected
exampleを一行で書くために使う書き方です。

“`ruby

it { is_expected.to eq(2) }
“`

####use_before_action()
コントローラーで設定したbefore_actionをテスト環境で実行する。

“`ruby

it { is_expected.to use_before_action(:set_article) }
“`

####respond_with()
レスポンスの種類、状態を返す。

元記事を表示

updateアクションでバリデーションが効かない時の対処法

##環境
– ruby 2.6.5
– rails 6.0.0
– capistrano 3.14.1
– AWS(EC2)
– Web Server Nginx
– Application Server Unicorn

##実装したいこと
`controller.rb`の`update`アクションにバリデーションを反映させる。

##原因
updateアクションのエラーハンドリングのif文で`@post.valid?`から書いている。
この書き方では、すでに登録されている情報に対してバリデーションが効いてしまう。

“`ruby:post_controller.rb
def update
if @post.valid?
@post.update(post_params)
flash[:notice] = “編集が完了しました”
redirect_to post_path(@post.id)
else
flash.now[:alert] = “編集に失敗しました”
render :edit
end

元記事を表示

数字の範囲を絞って入力を制限したい

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

2.どのように使うのか

3.補足

1.結論
—————————————-
validates_inclusion_of :(カラム名), in:(数字)..(数字) を使う!

2.どのように使うのか
—————————————-
バリデーションの数字の範囲指定になります!

“`ruby:models
validates_inclusion_of :
“`
の”:(コロン)以降”はmigarteフォルダやDBのカラムで設定している任意の名前をいれます!記載する場所はmodelsの任意のフォルダ名になります!

“`ruby:models
in:..
“`
の部分は”..”の前後に範囲にしたい数字を入れます!

例えば100から2000であれば

“`ruby:models
val

元記事を表示

Rails5+Docker環境におけるActiverecord関連付け後マイグレーションのエラー

### クリニックとそこに勤務するスタッフのDB作成と関連付けを行う。
rails 5系
ruby 2.4.5
Docker
下記環境

“`Dockerfile
FROM ruby:2.4.5
RUN apt-get update -qq && apt-get install -y build-essential nodejs
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app
“`

“`Docker-compose.yml
version: ‘3’
services:
web:
build: .
command: bundle exec rails s -p 3000 -b ‘0.0.0.0’
volumes:
– .:/app
ports:
– 3000:3000
depends_on:
– db

元記事を表示

OTHERカテゴリの最新記事