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

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

[メモ]Rails超基礎 勉強して個人的に違いが分からなくなったメソッド

##redirect_toメソッド
「redirect_to(URL)」とすることで、そのページに転送することができます。
以下だとcreateアクションを実行すると「/posts/index」ページへ転送される。

“`
def create
redirect_to(“/posts/index”)
end
“`

##renderメソッド

別のアクションを経由せずに、直接ビューを表示することができます。
render(“フォルダ名/ファイル名”)のように表示したいビューを指定します。
renderメソッドを使うと、redirect_toメソッドを使った場合と違い、そのアクション内で定義した@変数をビューでそのまま使うことができます。
以下だとupdateアクションが実行された時、@postにid(例 id:1)を持つデータをデータベースから取り出す。
取り出したデータのcontentカラムデータだけ取り出し@post.contentに格納する。
最後に「posts/edit」というURLに@post.contentという変数をビューでそのまま使うことができる。

“`

元記事を表示

【Rails】form_with (local: true)について

# なんでlocal: true入れるの?

“`ruby
= form_with(model:post.new, local: true) do |f|
“`

`local: true`がない場合、Rails5ではAjaxによる送信という意味になる。普通にHTMLとしてフォームを送信する場合に`local: true`が必要になる

元記事を表示

【Rails】routes collectionとmemberについて

###colletionとmemberを使う目的

どちらもroutingで使うとき、resourcesでは自動で生成されないactionへの設定を使用

“`ruby:route.rb
resources :users do
member do
get :follow
#follow_user GET /users/:id/follow(.:format) users#follow
get :like
#like_user GET /users/:id/like(.:format) users#like
end
end
“`

### 違い
生成する
routingに、:idがつくかつくのか
member つく
collection つかない

#### member
“`ruby:
resouces :users do
member do
get :follow
end
end
“`
“`
follow_user GET /use

元記事を表示

kaminariでページネーション作ったる

#ページネーションとは
今何ページ目にいるかがわかるやつです。
よく画面の下にあります↓
![7355fe4673cc916f3090de3d6f313ad7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529651/8915b9b2-4719-53ab-acb3-9304bc2a0da4.png)

kaminariというgemを使うことで簡単に実装できます。

#【その1】gemを追加する
“`ruby:Gemfile
gem ‘kaminari’
“`

“`terminal
bundle install
“`

サーバーを再起動します。

“`terminal
rails s
“`
なぜなら、サーバーを起動した際にgemが反映されるからです。

#【その2】コントローラーを編集する
“`ruby:tweets_controller.rb
def index
@tweets = Tweet.all.page(params[:page]).per(5)
end
“`

元記事を表示

Railsチュートリアル 第10章 ユーザーの更新・表示・削除 – 認可

# 認証と認可

ウェブアプリケーションの文脈において、「認証(authentication)」と「認可(authorization)」は以下のような意味で用いられます。

* 認証…サイトのユーザーを識別すること
* 認可…認証したユーザーに対し、当該ユーザーが実行可能な操作を管理すること

対応する英語の綴りが似通っており(最初4文字と最後5文字が同じ)、大変紛らわしいのですが、ともかくこの2つの概念の違いは重要です。

Railsチュートリアルにおいては、[第8章](https://railstutorial.jp/chapters/basic_login?version=5.1#cha-basic_login)で認証の仕組みを実装しました。認証の仕組みが実装されているので、認可の仕組みを実装する準備も整っています。これから実装していくのは、認可の仕組みです。

# このパートで実装する内容

## 現状

ここまでの実装により、editアクションとupdateアクションが完全に動作するようになりました。しかしながら、現状では、以下のようにセキュリティ上の大きな問題を含む実装にな

元記事を表示

【Heroku】デプロイ後にcode=H14 desc=”No web processes running”

## 事象
話の流れとしては[この記事](https://qiita.com/rebi/items/373dfcf53cacfd027f7a)の続きになります。

Dockerで開発環境構築をしたRailsアプリのコンテナをpushすることができたのですが、その後

“`console
$ heroku addons:create heroku-postgresql:hobby-dev

$ heroku container:release “コンテナ名”

$ heroku open
“`

として、サイトを開いてみると、

スクリーンショット 2019-09-24 7.44.05.png

とHerokuのエラーが発生していました。

## 解決方法
まず、画面に書かれている通り、コンソール上で`hero

元記事を表示

Railsチュートリアル 第10章 フレンドリーフォワーディングの追加演習 – フレンドリーフォワーディングのリダイレクト先のURLが渡されていないことのテスト(updateアクション編)

# 何についての記事か

「Railsチュートリアル 第10章 演習 – フレンドリーフォワーディング」の発展学習となります。

同演習には、「渡されたURLに初回のみ転送されていることを確認する。具体的には、リダイレクトのURLはデフォルト (プロフィール画面) に戻っていることを確認する。」という内容の出題があります。それであれば、逆に「『ログインしていない状態でRDB上のユーザー情報を更新しようとした』という状況で、フレンドリーフォワーディングのリダイレクト先のURLが渡されていないこと」のテストも必要なはずです。

というわけで、発展学習としてQiita記事を書いてみました。

# 内容

## フレンドリーフォワーディングのリダイレクト先のURLを保存する処理はどこにあるか

[editアクションの場合と同じく](https://qiita.com/rapidliner00/items/2a67497bcb9b2ea93f5a#%E3%83%95%E3%83%AC%E3%83%B3%E3%83%89%E3%83%AA%E3%83%BC%E3%83%95%E3%82%A9%E3

元記事を表示

Railsチュートリアル 第10章 フレンドリーフォワーディングの追加演習 – フレンドリーフォワーディングのリダイレクト先のURLが正しく渡されていることのテスト(editアクション編)

# 何についての記事か

「Railsチュートリアル 第10章 演習 – フレンドリーフォワーディング」の発展学習となります。

同演習には、「渡されたURLに初回のみ転送されていることを確認する。具体的には、リダイレクトのURLはデフォルト (プロフィール画面) に戻っていることを確認する。」という内容の出題があります。それであれば、逆に「『ログインしていない状態でユーザー情報編集ページにアクセスしようとした』という状況で、フレンドリーフォワーディングのリダイレクト先のURLが正しく渡されていること」のテストも必要なはずです。

というわけで、発展学習としてQiita記事を書いてみました。

# 内容

## フレンドリーフォワーディングのリダイレクト先のURLを保存する処理はどこにあるか

現在の実装では、「Usersコントローラーの`edit`アクションが呼び出される前には、同コントローラーの`logged_in_user`」メソッドが呼び出されるようになっています。そのコードは以下のとおりです。

“`ruby:UsersController#logged_in_user
d

元記事を表示

RailsでぐるなびAPIを使って店舗検索する。

#アクセスキーの取得
https://api.gnavi.co.jp/api/ でアクセスキーを取得します。

#実装する
shops_controllerを作成し、indexでぐるなびapiで店舗データ取得します。
今回は、先ほど取得したアクセスキーをcredentialsで管理しています。

“`ruby:shops_controller
api_key= Rails.application.credentials.dig(:grunavi, :api_key)
url=’https://api.gnavi.co.jp/RestSearchAPI/v3/?keyid=’
url << api_key if params[:search] word=params[:search] url << "&name=" << word #名前で検索 end url=URI.encode(url) #エスケープ uri = URI.parse(url) json = Net::HTTP.get(uri)

元記事を表示

【jquery】画面スクロールボタンの実装からイベント発火の基本を復習する

#目的
jqueryを用いて画面をスクロールさせるボタンを実装します。
基礎の復習も兼ねてかなり初歩的な部分も調べつつまとめています。

#まずは完成形から

###HTMLにてボタンを配置
“`erb

“`
###jsファイルに処理を記述
“`js
$(function(){
$(“.scroll_btn”).on(“click”, function(){
$(“.contents”).animate({scrollTop: $(“.contents”)[0].scrollHeight}, 500, “swing”);
})
})
“`
#jsファイルそれぞれの記述について

###$(function(){…})

“`js
$(function(){
//処理したい内容
})
“`
この部分は、
「HTMLの読み込みが全て完了したら、以下の処

元記事を表示

DockerでRails環境を構築するときに発生したエラー

#Webpacker configuration file not found
Rails6.0を使う場合、webpackerが標準になっているので,webpackerをインストールしていない場合,以下のエラーが出ます。

“`ruby:
Webpacker configuration file not found /app_name/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen – /app_name/config/webpacker.yml (RuntimeError)
“`

webpackerを使うためにはYarnが必要です。
そこでDockerfileに以下を追加してYarnをインストール必要があります。

“`ruby:Dockerfile
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add –
RUN echo “deb h

元記事を表示

LIKE句(演算子)を使用したあいまい検索について

LIKE句(演算子)を使用したあいまい検索について、完全に忘れていたため、備忘録もかねて以下にまとめます。

#LIKE句(演算子)とは
SQLの検索条件に指定される文字列比較演算子である。
ちょっと難しいですが、SQLに対して、LIKE句を使用するとあいまい検索ができるようになるということです。

#LIKE句(演算子)の使い方
Railsでは基本的にWhereと一緒に使用し、以下のように使います。

“`:例
model名.where(‘検索するカラム名 LIKE(?)’, “検索ワード”)
“`

**検索の取得件数の指定方法**
.limited(数)と記載しましょう

“`:例
>>先ほどのコードと組み合わせると以下のようになります。
model名.where(‘検索するカラム名 LIKE(?)’, ‘検索ワード’).limited(数)
“`
**不要な情報を除外する時**
.where.not(不要な情報)

“`:例
>>先ほどのコードと組み合わせると以下のようになります。
model名.where(‘検索するカラム名 LIKE(?)’, ‘検索

元記事を表示

【Rails】ログイン機能を実装する

[TODO](https://qiita.com/d0ne1s/items/5e63dde992f20f25b8bb)アプリにログイン機能を実装します。

・[【Rails】バリデーションを実装する](https://qiita.com/d0ne1s/items/822f66d16d65ae28162b)
・[【Rails】パーシャルを利用する](https://qiita.com/d0ne1s/items/154a5faa5ae09466e637)

##Userモデルを作成
`name`、`email`、`password_digest`という属性を持つUserモデルを作成します。`password`ではなく、必ず`password_digest`という属性を設定してください。

“`terminal
$ rails g model User name:string email:string password_digest:string
“`
“`terminal
$ rails db:migrate
“`
##ハッシュ化したパスワードで認証ができるようにする
パスワードを

元記事を表示

URIとURLの違いはソーセージとウィンナーの違いと覚えろ!!

#まずはソーセージから
エンジニアの皆さま、ソーセージとウィンナーの違いはご存知でしょうか?
ちなみに私の好きなソーセージはシャウエッセンですね。
一回沸騰したお湯で3分くらい茹でてから、醤油を垂らしながら焼くと旨味がパンパンに閉じ込められてめちゃめちゃうまいです。。。
2袋で400円くらいなんで、ちょっと高いですけどね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501638/e41f22ad-f8d8-f1ea-5bab-3450656ecacf.png)

本題にもどりますね。
ソーセージとウィンナーには明確な違いがあります。

###ウィンナー
**羊の腸に肉(豚肉や鶏肉)を詰めたもの**

###ソーセージ
**肉を腸に詰めた食べ物の総称**

つまり、ソーセージという腸詰めの食べ物の中の種類の一つにウィンナーがあります。
ウィンナーはソーセージの一種ということですねえ。
ちなみにソーセージの種類にはウィンナーの他にも何個かあってフランクフルトとかボロニアとかありますね。

元記事を表示

【rails】$ rails g model ~ で複数形にし忘れた

#い つ も の
うっかりミスで「あ、model名を複数形にするの忘れた!」って思ってターミナル見直したら、
まさかのrailsが補完して「s」つけてくれていたという

“`console
i$ rails g model chapter

Running via Spring preloader in process 65132
invoke active_record
create db/migrate/20191124065802_create_chapters.rb
create app/models/chapter.rb
invoke test_unit
create test/models/chapter_test.rb
create test/fixtures/chapters.yml

“`

#おわりに
こんなことまで面倒見てくれてるとは知らなかったです。
rails ありがとう!!

元記事を表示

deviseでログイン機能をつくろう!

#【基本】
deviseというgemを使えば、よくあるログイン機能を簡単に作成できます。

#①
Gemfileに

“`ruby:Gemfile
gem ‘devise’
“`
を記述し

“`terminal
bundle install
“`
を実行

その後、サーバーを再起動。

#②
“`
rails g devise:install
“`
で設定ファイルを作成。

#③
“`
rails g devise user
“`
でモデルを作成し

“`
rails db:migrate
“`
を実行

自動で追記される↓

“`ruby:config/routes.rb
Rails.application.routes.draw do
devise_for :users
#以下略
“`

こいつのおかげで必要なルーティングが一気に生成され、current_userやuser_signed_in?などのヘルパーメソッドが使えるようになる。

#④
“`
rails g devise:views
“`

でビューファイル作成。

元記事を表示

【RSpec3.9】苦手意識克服!一番シンプルな文法で簡単なテストを書いて理解してみよう

## はじめに
これからRSpecを導入しようとされている方の中で、

– テストに対する**抵抗感をなくしたい**
– まずは**簡単なテストの書き方を知りたい**

という方向けに書きました。

RSpecの**超基本文法**とそれを使ったテストの例を以下4つの視点で1つずつ掲載しています。

1. Model
1. Controller
1. View
1. Routing

参考になれば幸いです。

【参考にさせて頂いた記事】
[使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」 – Qiita](https://qiita.com/jnchito/items/42193d066bd61c740612)
[使えるRSpec入門・その2「使用頻度の高いマッチャを使いこなす」 – Qiita](https://qiita.com/jnchito/items/2e79a1abe7cd8214caa5)
[使えるRSpec入門・その4「どんなブラウザ操作も自由自在!逆引きCapybara大辞典」 – Qiita](https://qiita.com/jnch

元記事を表示

RSpecに画像ファイルアップロードのテストを通す

#FactoryBotとCarrierWaveを使ってRSpecに画像ファイルアップロードのテストを通す
備忘録

FactoryBotとCarrierWaveを使ってRSpecに画像ファイルアップロードのテストを通す方法

##環境
ruby 2.6.3
rails 5.2.3
carrierwave
FactoryBot-rails

1.spec内にfixturesディレクトリを作成

2.model内のimageuplorderの記述があるか確認

3.FactoryBot内でpictureアップローダを呼び出す

“`factories/feed.rb
FactoryBot.define do
factory :feed do
title { ‘タイトル’ }
content { ‘投稿内容’}
picture { Rack::Test::UploadedFile.new(File.join(Rails.root, ‘spec/fixtures/rspec_test.png’)) }
user
end
end
“`

###

元記事を表示

コマンド1つで、erbファイルをhamlファイルに変えちゃうよ

すべてのerbファイルをhamlファイルに変換する便利なコマンドを紹介します。

#gemを追加

“`ruby
gem ‘haml-rails’
gem ‘erb2haml’
“`

を追加

bundle installもお忘れなく。

#魔法のコマンド

“`
rails haml:replace_erbs
“`

これでいけると思います。
僕がはじめて成功した時は小躍りしました。

ではまた!

元記事を表示

Ruby on Rails パラメータ付き遷移処理の方法

概要

遷移元のテキストボックスに入力した内容を、遷移先の画面に表示します。

画面イメージ

遷移元

qiita_sc_1.png

遷移先

qiita_sc_2.png

プログラム:共通

ルーティングを設定します。
moveアクションが遷移するアクションです。
indexアクションで遷移元で入力された値を受け取ります。
:nameがパラメーターで、入力され

元記事を表示

OTHERカテゴリの最新記事