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

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

投稿の編集ボタンと削除ボタンの表示

編集ボタンと削除ボタンが投稿した人物にしか表示できないようにする方法を教えます。

“`

<% if current_user && current_user.id == @shop.user_id %>

<%= link_to '編集', edit_shop_path(@shop) %>
<%= link_to '削除', shop_path(@shop), method: :delete, data: { confirm: '本当に削除しますか?' } %>

<% end %>

<% if current_user && current_user.bookmarks.exists?(shop_id: @shop.id) %>

元記事を表示

Railsで配列の配列を解消する方法

私はRailsのメンターをしています。?‍?
生徒さんからの質問で、自分が感覚的にやってたことに気がつく瞬間があります。

今回は、生徒さんからの質問にあった、
**「配列オブジェクトを返すつもりが、配列の配列になってて、エラーになります!解消したいです!」**
という内容について、お話しします。?‍?

## 配列の配列とは?

例えば、下記のケースです。
“`ruby:hoge_contoroller.rb
def index
tags = Tag.where(name: params[:name])
@posts = tags.map do |tag| # これが配列の配列になっている。
tag.posts
end
@posts = Kaminari.paginate_array(@posts).page(params[:page])
end
“`
@postsが配列の配列になっていますので、Kaminariでエラーになります。
データとしては下記みたいな感じ。
[[postA,postB],[postC,postD]]

**みなさん

元記事を表示

Rubyのセットアップ(WSL)

## 背景
Java,C#,VB.NET,Swift,Rust,TypeScript,Pythonなどは書いたり環境構築したことがあるが(Pythonはちょっと経験少ないが)、Rubyはまだまともに書いたことなかったので、Hello Worldくらいやってみようと思ったのでちょっとやってみる。
最近は環境構築はDockerのほうがいいかもだけども。

## 環境
– WSL2(Ubuntu22.04)

## 手順

### 1. パッケージ更新して、rbenv を入れる。

`apt-get install rbenv`すると、ちょっと古いやつが落ちてくるので、git cloneする

“`bash
$ sudo apt-get update
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
“`

### 2. パス設定 & 反映
“`bash
$ echo ‘eval “$(~/.rbenv/bin/rbenv init – bash)”‘ >> ~/.bashrc
$ source ~/.bashrc
“`

元記事を表示

READMEにGif動画を埋め込む方法

# 1.はじめに
READMEにGif動画を埋め込んでみたので、忘れないために本記事を書きました。
無料のGitHubプランではアップロードの上限が10MBまでとなっているらしく変換が必要とのこと。

# 2.事前準備
QuickTimeで画面収録を行っている。

# 3. 実装
### 1.ffmpegをインストール
– 以下コマンドでホームディレクトリにffmpegをインストールしてください。
“`
brew install ffmpeg
“`

# 2.movをgifに変換
動画を保存しているディレクトリへ移動し以下コマンドを実行してください。
“`
ffmpeg -i sample.mov -vf scale=720:-1 -r 10 sample.gif
“`

# 3.issueにアップロード
Githubにて新規issueを作成し、上記で作成したgifファイル(sample.gif)をドロップしてください。
そうすると、URLが表示されるのでそのままREAMEにコピー。
READMEを確認し動画が表示されていれば成功です。

元記事を表示

Failed to build gem native extensionでrailsがインストールできないときの対処法

環境はWindows11 64bit、普通にRuby Installer経由でインストールしました。
railsに手を出したかったのでgem install railsを叩いてみたらFailed to build gem native extensionのエラー。

調べてみると色々ヒットしたのですが単純明快な解決策が無かったので置いときます。
# MSYSをちゃんとインストールしよう
![スクリーンショット 2023-08-08 16.19.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3471799/92fb7fe3-d085-62b6-95dd-ecf0a3e00044.png)
Ruby installerでrubyをインストールした場合は途中でこの画面が勝手に出てくると思うんですけど、ここで1を選択すると面倒なことになります。3を選択してminGWも構築してもらいましょう。

自前でminGW-x64をインストールする対処法もやってみたのですが、パスを通すのが少々面倒だったりするのでおす

元記事を表示

ゲストログイン機能

# 1.はじめに
ポートフォリオとしてアプリをみていただく際に新規登録を行っていただくのは手間になると考えゲストログイン機能を実装しました。

# 2.実装
### 1.ゲストログイン用のルーティングを追加
“`:routes.rb
devise_scope :user do
post ‘users/guest_sign_in’, to: ‘users/sessions#guest_sign_in’
end
“`

### 2.コントローラーの編集
`sessions_controller.rb`がない場合は、以下コマンドで作成してください。
“`
rails g devise:controllers users
“`
“`:controllers/users/sessions_controller.rb
def guest_sign_in
user = User.guest
sign_in user
redirect_to posts_path
flash[:notice] = “ゲストユーザとしてログインしました。”

元記事を表示

【初学者】Dockerに関する基本情報とMySQL接続までの流れ

RailsとSQL、Dockerについて改めて学習し直しています。
今回は、Dockerについて、学んだことをまとめ、引用・参考したサイトをこちらに記していきます。

# Dockerとは?
>Dockerを一言で表すと、データやプログラムを隔離できる仕組みです。
私たちが使用しているパソコンやサーバでは、複数のプログラムが動いています。パソコンであれば、ExcelやWordなどのソフトウェアを同時に立ち上げて使用していますし、サーバでは、ApacheやMySQLなどの複数のソフトウェアが同時に動いています。
こうした複数のデータやプログラムを、独立した環境に構築することができるのがDockerです。

【Docker】Dockerについて

# Dockerの特徴
– 「コンテナ」と呼ばれる仮想環境を構築する。

#### 【補足】Apacheとは?

> Apacheは、無償で利用できるオープンソースのWebサーバーソフトウェアです。 汎用性が高く、Wi

元記事を表示

データ型 references型について

### references型について
references型はRailsのマイグレーションでよく使われるデータ型で、関連するモデル間で「参照」を表現するためのものです。一般に、あるテーブルのレコードが別のテーブルのレコードを指し示す必要がある場合に使用されます。

referencesを使うと、自動的に整数型のカラムを作成し、そのカラムに対する外部キー制約を設定します。

以下がマイグレーションコードの例です。
“`diff_ruby
create_table :comments do |t|
t.references :post, null: false, foreign_key: true
# 他のカラム
t.timestamps
end
“`
このコードは、post_idという名前の整数型カラムをcommentsテーブルに追加します。そして、このカラムはpostsテーブルのidカラムへの外部キーとして機能します。foreign_key: trueの部分が、外部キー制約を追加するための指定です。

したがって、t.references :postは以下の2行と同じ

元記事を表示

ブックマーク機能の実装

ブックマーク機能を作る時はマイグレーションファイルを作ります。
以下のコードを使ってファイルを作成する。

“`
rails generate migration CreateBookmarks

“`

生成されたマイグレーションファイルを以下のような構成にします。

“`
class CreateBookmarks < ActiveRecord::Migration[6.1] def change create_table :bookmarks do |t| t.references :user, null: false, foreign_key: true t.references :shop, null: false, foreign_key: true t.timestamps end end end ``` 次にブックマーク用のモデルを作成し、ユーザーモデルとショップモデルに関連付けます。 ``` class Bookmark < ApplicationRecord belongs_to :use

元記事を表示

bootstrap導入

**はじめに**
bootstrapの導入方法について2通りの導入方法を見つけたのでメリット、デメリットをまとめました。
______________
### webpackを使用した導入方法
:tropical_fish:**メリット**:

統一性: Rails 6以降、WebpackerはデフォルトでJavaScriptを管理するために使われています。これにより、すべてのJavaScript関連のアセットが一箇所で管理されることになります。
最新のフロントエンドツールとの互換性: Webpackerを使用することで、最新のフロントエンドライブラリやフレームワークの導入が簡単になります。

:fish:**デメリット**:

複雑さ: 初めてWebpackerを使用する場合、設定やトラブルシューティングが複雑に感じることがあります。

:cherry_blossom:**Webpackerを使用して、jquery、bootstrap、およびpopper.jsを導入する手順**

:star:必要なパッケージのインストール
“`
yarn add jquery bootstrap@

元記事を表示

rails_adminを使用した管理画面の作成

## 環境
Ruby: 3.2.2
Rails: 7.0.6
db: postgresql
css: tailwind css
※ユーザー機能はDeviseを使用

## rails_adminとは
Railsアプリケーションの管理画面を自動で作成してくれるgemのこと。
管理画面内でデータのCRUDができるようになる。

## cancancanとは
権限管理ができるgemのことで、特定のユーザーがアクセスできるリソースを制限することができる。
例)管理者(admin)ユーザーしか管理画面を使用できないようにする。

## 導入
“`ruby:Gemfile
gem ‘rails_admin’, ‘~> 3.0’
gem ‘cancancan’
“`

“`bash
$ bundle
“`

## rails_adminのインストール
“`bash
$ bin/rails g rails_admin:install
? Where do you want to mount rails_admin? Press for [admin] > #この表示はUR

元記事を表示

RailsとkeycloakでOIDC認証を試してみた

株式会社 Vitalizeで webエンジニアをしている @nagaemon です。
現在は長野の支社にお世話になっており、現在はエンジニア + 地方創生事業に携わっています。
好きな言語はrubyです。

## keycloakとは
Keycloakはオープンソースのアイデンティティ・アクセス管理ソフトウェアです
概要はこちらの記事がわかりやすいので、ご覧ください。
[Keycloakとは](https://qiita.com/daian183/items/30f01e162e03567ff21b)

## 今回の目的
Qiitaでもkeycloak関連の記事はありますが、 Keycloak ✖️ Railsの記事がなかったので、自分の備忘録も兼ねて記事を書こうと思いました。

今回はkeycloakのOIDC(openIDconnect)を使って実際にrailsを用いてログイン機能が作れるのかどうかを試してみます。

## サンプルファイル
https://github.com/e601201/keycloak_with_rails

## 開発環境
### Keycloak

元記事を表示

ReactとRailsを使ったJWT認証。

# JWT認証について簡単にまとめました。
やることはバックエンドはRailsでGemを使ってトークンの発行をします。
フロントではログイン画面を作成しAxiosを使ってRailsのAPIを利用します。
ヘッダーにはトークンの所持の有無を検証させて持ってない場合はログイン画面にリダイレクトさせます。
ログアウト機能はローカルストレージに保存したトークンを削除することで実装とします。
本格的ではありませんが認証の基本を理解してもらえたら嬉しいです。

※railsとReactの説明はしません基本的なことは理解できている前提で進めます。

## そもそも認証とは
システムがユーザーの身元を確認するプロセスのことです。
これにより、ユーザーは自分がアカウントの所有者であることを証明できます。

## JWTとは
JWT(JSON Web Token)は、情報を安全に伝達するためのコンパクトでURLセーフな方法を提供する、オープンスタンダード(RFC 7519)です。
JWTは3つの部分から成り立っています
– ヘッダー(Header): トークンのタイプと使用している暗号化アルゴリズムを指定

元記事を表示

[Rails] rbenv環境下でのERB Formatter/Beautifyのパスの設定

# 1. はじめに
`.html.erb`ファイルのフォーマッタとして有名なERB Formatter/Beautifyであるが、初期設定のままだと次の写真のように
![Screenshot 2023-08-07 at 11.06.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1694793/4f829637-7a06-55fb-c289-0a672450e314.png)
“`
Couldn’t run htmlbeautifier ‘spawn htmlbeautifier ENOENT’
“`

“`
Error occurred while formatting: spawn htmlbeautifier ENOENT
“`
というエラーが出てきてフォーマッタが動かなかった。

# 2. 対処法
“`shell
$ rbenv which htmlbeautifier
“`
を実行して返ってきたパスをSettingsのExecute Pathに指定する。

例:
GUIなら

元記事を表示

scriptタグに指定するnonceについて

ある日、開発で使用しているgemのlayoutファイルに以下のようなコードを見かけました。

“`erb:
<%= javascript_tag nonce: true do %>
“`

`javascript_tag`に`nonce: true`のオプションが渡されています。
「なんぞこれ?」となったのでとりあえずnonceに関して調べてみました。

## nonceについて
scriptタグに付与することができるnonce属性は、XSS攻撃などで不正なスクリプトが実行されることを防ぐために利用されます。

nonceは”number used once”の略で、一度だけ使用される数値を意味しています。
scriptタグに設定されたnonce属性には以下のような使い捨ての乱数を設定し、ページを読み込むたびに異なる乱数が再設定されるようにします。

“`html

“`

さらに、nonceに設定した乱数と同じ値を`Content-Security-Policy

元記事を表示

星レビューの実装方法

次はコメントの投稿の際に星をつけてレビューする機能の実装方法を教えます。
まず最初にmodelのreview.rbを作成し、関連対象のモデルをbelongs_toを記載します。

“`

class Review < ApplicationRecord belongs_to :shop belongs_to :user end ``` その後にreview用のマイグレーションファイルを作成し、カラムや関連づけるテーブル名を記載します。 ``` class CreateReviews < ActiveRecord::Migration[version] def change create_table :reviews do |t| t.integer :rating t.text :comment t.references :shop, null: false, foreign_key: true t.references :user, null: false, foreign_key: true

元記事を表示

「bundle install」と「rails g devise:install」の2つのインストールの違いについて

私はRailsのメンターをしています。?‍?
生徒さんからの質問で、自分が感覚的にやってたことに気がつく瞬間があります。

今回は、生徒さんからの質問で、
**「deviseをインストールするときに、「bundle install」と「rails g devise:install」、なぜ2つのインストールコマンドが必要なの?」**
という内容について、お話しします。?‍?

**みなさん、今すぐ説明できますか?  
一度考えてみてください。**

## 結論
いずれのコマンドにも、「install(インストール)」という同じ言葉が含まれており、
初学者にとって混乱しやすいですが、**全く別の役割**で使用されています。

## 「bundle install」って何?
まず、**bundle install**はRubyのパッケージマネージャーであるBundlerのコマンドです。Rubyのプロジェクトでは、特定のライブラリ(gem)が必要となることが多々あります。その必要なgemをプロジェクトに導入するために、**bundle install**を実行します。これにより、プロジェクトの

元記事を表示

Rails7でのDockerfile

# 環境

– Rails 7.0.5
– Postgres
– Docker 20.10.23

# Dockerfile

開発環境、プロダクション環境共用。

“`dockerfile
# Build stage
FROM ruby:3.2.2-alpine AS build

ARG UID=1000
ARG GID=1000
ARG RAILS_ENV=production

ENV APP_USER=app
ENV WORKDIR=/project

# yarn は rails assets:precompile のために必要。
RUN apk add –no-cache –update build-base \
linux-headers \
postgresql-dev \
tzdata \
busybox-suid \
shared-mime-info \
gcompat \
yarn

RUN set -x && \
addgroup -g ${GID} -S ${APP_USER} && \
adduser -g ”

元記事を表示

デプロイ 本番環境へアプリケーションを配置する

**はじめに**
は本番環境であるEC2上にアプリケーションを動かす環境を構築済みと仮定します。
RailsアプリケーションをEC2上に配置していきます。
また、動作させるためのアプリケーションの準備を行います。

開発環境であるCloud9環境と、デプロイを行うEC2の環境と2つの環境を使用します
________

### :shamrock:Railsアプリケーションをデプロイする

:star:**GitHubからアプリケーションを取得する**
Cloud9から秘密鍵をEC2サーバーに送る
“Cloud9で行います。“

EC2サーバーでgit cloneを行う時にsshでcloneするために、Cloud9環境に存在する秘密鍵を転送します。

IPアドレスの部分にはEC2サーバーのパブリックIPを指定します。

“`
ec2-user:~/environment $ scp -i ~/.ssh/practice-aws.pem ~/.ssh/id_rsa ec2-user@IPアドレス:.ssh/id_rsa
“`
:star:**GitHubからアプリケーションを取得

元記事を表示

shamrock:Linuxのディレクトリ構成

### :shamrock:Linuxのディレクトリ構成について
Linuxのディレクトリ構成は、様々なファイルやディレクトリが整然と配置されているシステムです。以下は、Linuxのよく使用するディレクトリ構成とその説明です。

**/ (ルート)**
Linuxファイルシステムの最上位にあるディレクトリ。すべてのファイルやディレクトリは、このルートディレクトリから始まります。

**/bin**
基本的なコマンドバイナリが保存されているディレクトリ。ls, cp などの基本コマンドがここにあります。

**/boot**
システム起動に関連するファイルが格納されている場所。カーネルや初期RAMディスクなどが格納されています。

**/dev**
デバイスファイルが格納されているディレクトリ。HDD、USBデバイス、キーボードなど、システム上のすべてのデバイスがこのディレクトリにファイルとして表現されます。

**/etc**
システム全体の設定ファイルやスクリプトが格納されているディレクトリ。

**/home**
ユーザーのホームディレクトリ。各ユーザーには/home/ユーザー名と

元記事を表示

OTHERカテゴリの最新記事