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

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

railsチュートリアル第九章 発展的ログイン機構

##Remember me機能
ユーザーのログイン状態をブラウザを閉じた後でも有効にする[remember me]機能を実装する。
明示的にログアウトしなければログアウトできない。
ブランチを作成

“`
$ git checkout -b advanced-login
“`

###記憶トークンと暗号化
記憶トークンと暗号化、cookiesメソッドによる永続的cookiesの作成や、安全性の高い記憶ダイジェストに
トークン認証にこの記憶トークンを活用する。

sessionメソッドで保存した情報は自動的に安全が保たれている。
しかしcookiesメソッドに保存する情報は安全ではない。
盗み出す方法がいくらでもある。

永続的セッションを作成するには

1.記憶トークンにはランダムな文字列を生成して用いる。
2.ブラウザのcookiesにトークンを保存するときには、有効期限を設定する。
3.トークンはハッシュ値に変換してからデータベースに保存する。
4.ブラウザのcookiesに保存するユーザーIDは暗号化しておく。
5.永続ユーザーIDを含むcookiesを受け取ったら、そのID

元記事を表示

railsチュートリアル第八章 ログアウト

##ログアウト
ログアウト機能を追加する。

ユーザーが明示的にログアウトするまではログイン状態を保他なくてはならない。
ユーザーセッションを破棄するための有効なアクションをコントローラで作成。

####log_outメソッド
app/helpers/sessions_helper.rb

“`rb
module SessionsHelper
.
.
.
# 現在のユーザーをログアウトする
def log_out
session.delete(:user_id)
# ユーザーセッションを削除
@current_user = nil
# セキュリティ上nilの設定する。
# 本来ならこれはしなくて良い。
end
end
“`

####セッションを破棄する(ユーザーのログアウト)
app/controllers/sessions_controller.rb

“`rb
class SessionsController < ApplicationController . . . def destroy # ユーザー削除

元記事を表示

railsチュートリアル第八章 ユーザー登録時のログイン

###ユーザー登録時のログイン
ユーザー登録中にログインを済ませておくことにします。

####ユーザー登録中にログインする
app/controllers/users_controller.rb

“`rb
class UsersController < ApplicationController def show @user = User.find(params[:id]) # データベースからユーザー情報を取り出す end def new @user = User.new #新しくユーザーオプジェクトを作成する # オブジェクトの属性をつける end def create @user = User.new(user_params) # 外部メソッドを使う if @user.save # 保存の成功をここで扱う。 log_in @user # 登録後に自動ログインするため flash[:success] = "Welcome to

元記事を表示

【Rails】 通知機能の難しい箇所を解説してみた

通知機能

PFに通知機能を搭載したのですが、
理解するのが難しかったため勉強もかねて
通知機能の難しい箇所をひとつひとつ解説することにします!

流れ

・モデルの解説
・コントローラーの解説
・ヘルパーの解説

モデルの解説

“`php:app/models/post

# 通知機能のアソシエーション
has_many :notifications, dependent: :destroy

def create_notification_by(current_user)
notification = current_user.notifications.new(post_id: id, visited_id: user_id, action:”like”)
notification.save if notification.valid?
end

# comment_idはコントローラーで@comment.idと指定しているので
# 投稿のidを引数にいれている
def create_n

元記事を表示

AuthModule+Devise+Devise_token_authを使用した認証機能

## はじめに
Nuxt.js Rails Docker postgresqlで新規プロジェクトがあったのでその認証機能の備忘録

## 環境
macOS

## 前提条件
docker-compose upでfornt,apiのコンテナが立ち上がり
`localhost:8080`(Nuxt)と`localhost:3000`(Rails)でウェルカムページが表示されていること
環境構築がまだの方は[こちら](https://qiita.com/Bezzi05791520/items/1c42d1faf03eec62dc8e)を参考にどうぞ

## この記事を読んでできること
`devise`/`devise_token_auth`/`authModule`を使用したログイン/ログアウト/新規登録の実装
*細かいコードの説明はしていません

## ログインの流れ
* front側でメールアドレス/パスワードを入力してHTTPリクエストをapi側へ送信
* api側でHTTPリクエストを受け取り`devise_token_auth`にて認証する
* 認証正常:ヘッダー情報をfront側

元記事を表示

【アプリ開発】プログラミング初学者向けのアプリ『Roooad(ロ—ド)』をリリースしました。

# はじめに
ポートフォリオ用に、個人開発アプリ`『Roooad(ロ—ド)』`をリリースしました!

『Roooad(ロ—ド)』は、プログラミング初学者のために、皆が歩んできたロードマップを見ることができるサービスです。

https://roooad-map.com/

開発期間は、約40日間です。
デザインが苦手だったので、他の方のデザインを参考にさせていただきました?‍♂️(cssは、一から書いたので少し時間が掛かりました。)

また、途中AWSでのデプロイで躓いて10日ほど費やしてしまいました…
何はともあれ、無事アプリ開発ができて良かったです?

# アプリについて
### 登場人物

– プログラミング初学者(閲覧・作成)
– 個人で、メンターや学習教材を販売している方の宣伝(作成)

### ユーザーが抱える課題

– 初学者には「学習の流れ・学習にかかる期間・言語選び」と`分からないことが多い`。他人の学習してきた手順や期間を参考にしたい!
– プログラミング関連の学習教材やサービスの認知をして貰いたい。

### 解決方法

自身の学習終了までのロードマップ

元記事を表示

holiday_japanを使って平日のみcronを実行させる

gemのholiday_japanを使って平日のみ(土日祝日以外)taskが実行されるようにしたい。

##前提
現在のQiitaの記事投稿状況をSlackに通知してくれるbotがあり、その通知を平日19時に実行されるようにしたい。
gemのholiday_japanを使用したい。

– “`exit“`の引数がtrueだったら正常終了で0、falseの場合1を引数に指定したとみなさる

参考:https://docs.ruby-lang.org/ja/latest/method/Kernel/m/exit.html

“`scripts/check_holiday
#!/usr/bin/env ruby
require ‘bundler/setup’
require ‘holiday_japan’

exit(HolidayJapan.check(Date.today))
“`

– 「平日19時」だけ実行したい
– job_typeを指定することでコマンドをつなげられる
– “`||“`は左側が値が返ってくる(=true)のとき、右側も実行される

“`confi

元記事を表示

アプリケーション開発の手順!

#①.結論!

アプリケーション制作の手順は主に「企画/要件定義/設計/開発/保守運用」であることです!

実際にコードを書くのは「開発」と呼ばれるタイミングにあたり、その前後にもさまざまなやることがあります!

#②.企画

どんなアプリ(機能)を作るか決める段階のことです!

企画では初めに、誰のどんな問題を解決したいのかを決めます!

これが決まったら、解決手段として新しくアプリを作ったり、すでにあるアプリに新機能を追加することがあります!

企画でアプリ・機能を開発することが決まったら、次は作るものについての詳細を決めていきます!

これを「要件定義」と言います!

#③.要件定義

ユーザーがどのように機能を使用するのかを考え言語化する、障害が起こった時どうするかを決めるなど、詳細な情報を整理します!

要件定義が終わった後に、具体的にどんなコードを追加するのか、どんなテーブルを追加するのかなどを決めることを「設計」と言います!

#④.設計

エンジニアが実際にどのようにアプリや新機能を作っていくかの手順書や、必要な設計図を作る工程です!

設計には基本設計と詳細設計という

元記事を表示

【RSpec】webmockでテスト

##環境
Ruby 3.0.2
Rails 6.1.4.1

##前提
現在のQiitaの記事投稿状況をSlackに通知してくれるbotがあり、そのテストを書きたい

##テストのやり方

jsonのダミーデータを作成して適当なプロジェクト内に保存しておく。
slackの方も同じように作成。

“`qiita_user_response.json
{
“description”:”未経験から転職して3ヶ月目のサーバーサイドエンジニア\r\n12月10日までに100記事投稿を目標にしています!”,
“facebook_id”:””,
“followees_count”:0,
“followers_count”:1,
“github_login_name”:null,
“id”:”kat0″,
“items_count”:20,
“linkedin_id”:””,
“location”:””,
“name”:””,
“organization”:””,
“permanent_id”:XXXXX,
“profile_image_url”:

元記事を表示

[Rails]BASIC認証と環境変数について

##初めに
####なぜこの記事を書きたかったのか
RailsのBasicを固めたいから![コントローラー編]
設定したパスワードを忘れてアプリケーションを開けない状況に。。。パソコンのどこかに置いた記憶はあるけど確認方法を忘れてしまったので今後またこの事件が起きたときメモを残したかった!

####環境
・Macbook Air (Retina, 13-inch,2019)
・プロセッサ 1.6GHz デュアルコアIntel Core i5
・メモリ 8GB 2133 Mhz LPDDR3
・MacOS Big Sur バージョン 11.5.2

####記事の目次
**1)What is BASIC認証?**
**2)BASIC認証の使い方**
**3)鍵を隠す方法**
**4)最後に**

##What is BASIC認証?
**イメージはアプリケーションに入る前にユーザーの確認をするボディーガードが間にいる感じ。**
![bodygaurdsample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

Rails sorcery 他人の投稿を削除編集できないようにする

# 概要
Rails sorcery gemを使用して確認したことまとめ❸

# やり方
他人の投稿を削除編集できないようにする
→他の人の投稿の削除編集リンクを表示させないようにする

### 変更前

“`ruby:posts_controller.erb
def index
@posts = Post.all
end
“`

“`ruby:posts/index.html.erb
# 省略
<% @posts.each do |post| %>

<%= post.title %> <%= post.content %> <%= link_to 'Show', post %> <%= link_to 'Edit', edit_post_path(post) %> <%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Ar

元記事を表示

Rails 1対n アソシエーション (User must exit のエラー)

# 概要
Rails sorcery gemを使用して確認したことまとめ❷

# 1対n のアソシエーション

https://railsguides.jp/association_basics.html

### もともと

“`ruby:posts_controller.rb
def create
@post = Post.new(post_params)
if @pos.save
# 省略
end

private
def post_params
params.require(:post).permit(:title, :content)
end
“`

### アソシエーションを設定したので、このままだと
**保存できない!**
なぜなら、`user_id`が指定されていないから。

![9d1674a16adb01aceecded9b7604e5a5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2133440/a46210ec-4335-765d-f83

元記事を表示

Rails 【add_flash_types】 メソッド 使い方

# 概要
Rails sorcery gemを使用して確認したことまとめ❶

# add_flash_typesメソッド
>フラッシュメッセージのタイプを指定

**add_flash_types**メソッドで指定した**キー**が`redirect時のflash`で使えるようになる。
通常はnoticeとalertだけだが、任意のキーを指定できるようになる。

https://railsdoc.com/page/add_flash_types

### 使い方

“`ruby
add_flash_types(:タイプ名 [, …])
“`

ex) こんな感じで使用できる

“`ruby:applicaiotn_controller.rb
add_flash_types :success, :info, :warning, :danger
“`

“`ruby:〇〇_controller.rb
def not_authenticated
redirect_to login_path, warning: ‘ログインしてください’
end
“`
![9d6fe72

元記事を表示

【Rails】Tag機能 

#投稿にタグを紐付け〜絞り込みまで

##前提
– 投稿機能実装済
– bootstrap使用

##実装
###多対多の関係なので中間テーブルを用意
####まず`tag`モデル作成

“`:ターミナル
$ rails g model tag name:string
“`

“`ruby:
class CreateTags < ActiveRecord::Migration[5.0] def change create_table :tags do |t| t.string :name, null: false t.timestamps end end end ``` `null:false`を追加,空で保存できないように修正する ####`boards`と`tag`を紐付ける中間テーブルの作成 ```:ターミナル $ rails g model board_tag_relation board:references tag:references ``` ```ruby: class CreateBoardTagRe

元記事を表示

#2.5 レイアウトの調整

#はじめに
自分の学習復習のために、アプリを一から作成する手順を記事にしてます。
今回は #2.5 のレイアウト調整になります。

#目次
1.Bootstrap,font-awesomeの導入
2.各ページのレイアウト調整

##1.Bootstrap,font-awesomeの導入
* 1.gemファイルの追加
* 2.application.jsにbootstrap,font-awesomeを呼び出す記述を書く
* 3.Bootstrap,font-awesomeをSCSSに読み込ませる(今回はSCSSを使用)

の3つを行い、Bootstrap,font-awesomeの導入をしていく。

###1.gemファイルの追加
“`:gemfile
:
:
#bootstrapを利用できるようにする
gem ‘bootstrap’, ‘~> 4.5’
gem ‘jquery-rails’
#font awesomeも使えるようにする
gem ‘font-awesome-sass’, ‘~> 5.13’
“`

###2.application.jsにbootstrap,font-

元記事を表示

#2 投稿機能

#はじめに
自分の学習復習のために、アプリを一から作成する手順を記事にしてます。
今回は #2 の投稿機能になります。
ラジオボタンやプルダウン選択のフィールドも使用して作成していきます。

#目次
1.Model作成、マイグレーションファイルの編集
2.Controller,routes,viewファイルの作成
3.controllerの中身記述
4.viewファイルの中身記述

内容としてはシンプルですが、今回viewファイルの所でプルダウン選択やラジオボタンのフィールドも使用しているので、そちらの内容も理解していきましょう。

##1. Model作成、マイグレーションファイルの編集
“`
rails g model StudentPost
“`
投稿用のStudentPostテーブルを作成します。
rails db:migrateを行えばデータベースに反映されるのですが、その前にマイグレーションファイルを編集していきます。

“`Ruby:db/migrate/~~_create_student_posts.rb
create_table :student_posts

元記事を表示

Rails統合テストでDRb::DRbRemoteErrorにハマった話

前提

RailsチュートリアルにDockerを使い、学習を進めています。

開発環境

Ruby:3.0.2
rails:6.0.4

発生したエラー

5.3.4 リンクのテスト

統合テストを使うと、アプリケーションの動作を細かくてテストすることができる
site_layoutというテストのテンプレートを生成

“`ターミナル.
$ docker-compose exec web bundle exec rails generate integration_test site_layout
invoke test_unit
create test/integration/site_layout_test.rb
“`
リスト 5.32
assert_templateメソッドを使って、Homeページが正しいビューを描画しているか確かめる

“`test/integration/site_layout_test.rb
require ‘test_helper’

class SiteL

元記事を表示

railsチュートリアル第八章 レイアウト変更をテストする

###レイアウト変更をテストする
####fixture向けのdigestメソッドを追加する
app/models/user.rb

“`rb
class User < ApplicationRecord before_save { email.downcase! } # データベースに保存する前に処理をする。 # 入力されたメールアドレスを小文字にする。 validates :name, presence: true, length: { maximum: 50 } #属性はname,属性の存在を検証、 最大50字まで VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, length: { maximum: 255 }, #最大255字まで format: { with: VALID_EMAIL_REGEX }, uniqueness: tr

元記事を表示

railsチュートリアル第八章 レイアウトを変更する

###レイアウトを変更する
ログイン機能の最初の具体的な応用として、ユーザーがログインしているときとそうでないときでレイアウトを変更してみましょう
ログアウト」リンク、「ユーザー設定」リンク、「ユーザー一覧」リンク、「プロフィール表示」リンクも追加します

“`html
<%= link_to "Profile", current_user %>
“`

“`html
<%= link_to "Profile", user_path(current_user) %>
“`

####logged_in?ヘルパーメソッド
app/helpers/sessions_helper.rb

“`rb
module SessionsHelper

# 渡されたユーザーでログインする
def log_in(user)
session[:user_id] = user.id
#sessionメソッドで作成した一時cookiesは自動的に暗号化される
# ユーザーのブラウザ内の一時cookiesに暗号化済みのユーザーIDが自動で作成
end

元記事を表示

cannot load such file — nokogiri/nokogiri (LoadError)奮闘日記

railsチュートリアルの2周目さあ頑張ろう…!と意気込んでいたのですが、
「ゼロからデプロイまで」で躓きました。

#経緯

私はこのエラー、遭遇は2回目です。(1回目は諦めました)
1回目は、railsチュートリアルを進めていく上でcloud9の容量がなくなって、一度git cloneでローカル環境に取り込んだ時です。
rails serverの時にnokogiriエラーが出ました。

私の当時の力じゃどう頑張っても解決しそうになかったので、Cloud9の容量を無料最大まで上げた環境を新たに作り、そこにgit cloneをして学習を続けました。

1周では技術が自分のものになった気がしなかったので、2周目はローカル環境で進めてみようと思い再度nokogiriエラーと戦うことになりました。

#nokogiriエラーについて

railsを勉強する上でいろんな方が遭遇しているようです。

私が遭遇したエラーは、追い切れないほどのたくさんのlogの最後に

“`
‘require’:cannot load such file — nokogiri/nokogiri (LoadErr

元記事を表示

OTHERカテゴリの最新記事