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

Ruby関連のことを調べてみた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
“`

元記事を表示

GitHub Actionsの再利用可能なワークフローに別YAMLファイルで指定したmatrixを与えたい場合

GitHub Actionsの再利用可能なワークフローに,入力として別YAMLファイルで指定したmatrixを与える方法について,苦心の末,ようやく実現できましたので,ご報告します.

ElixirとErlang/OTPのバージョンのmatrixを与える場合を例に書きます.

# matrixの与え方

通常のmatrixだと次のように与える場合について,

“`yaml:matrix.yml
– otp-version: [‘24.3.4.13’, ‘25.3.2.3’, ‘26.0.2’]
elixir-version: [‘1.14.5’, ‘1.15.4’]
“`

次のように展開し,さらに`include:`の下につけます.エラーにならないよう,`.github/workflows`とは別のディレクトリに配置することもポイントです.

“`yaml:.github/actions/matrix.yml
include:
– otp-version: ‘24.3.4.13’
elixir-version: ‘1.14.5’
– otp-version:

元記事を表示

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をインストールする対処法もやってみたのですが、パスを通すのが少々面倒だったりするのでおす

元記事を表示

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

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

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

【Docker】Dockerについて

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

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

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

元記事を表示

ブックマーク機能の実装

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

“`
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

元記事を表示

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

元記事を表示

コメントアウトしたコードが動作に影響する場面がある件について(マジックコメント)

# コメントアウトしたコードが動作に影響する場面がある

### 【背景】
Swiftの環境構築の際や、Rubyで文字列を変換する為に文字コードを指定することがあった。
そこで、
“`ruby
# coding:UTF-8

# 以下各自のコードが続く
“`
という記述があり、この
「“`# coding:UTF-8“`はコメントアウトされているから、書かなくてもいいよね」
と思ったのだが、そうはいかなかったことが発端ですと。

他にも、Swiftの環境構築で、SwiftPM(PackageManager)を導入する際、次の記述をファイルに書き込んだのだが、
1行目の
“`// swift-tools-version: 5.8“`
この記述が無いとビルドに失敗したりする。
“`swift
// swift-tools-version: 5.8

import PackageDescription

let package = Package(
name: “BuildTools”,
dependencies: [
.package(url:

元記事を表示

[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**を実行します。これにより、プロジェクトの

元記事を表示

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

**はじめに**
は本番環境である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/ユーザー名と

元記事を表示

【Rails】deviseで使用できるヘルパーメソッド

## はじめに
deviseはユーザー認証機能を簡単に実装できるgemです。
導入後、便利なヘルパーメソッドを使用できるので頻用するものを紹介していきます。

## RubyとRailsのバージョン
– Ruby 2.7.7
– Rails 6.0.6.1

## deviseで使用できるヘルパーメソッド一覧
“`
before_action :authenticate_user!
# コントローラーの先頭に記述。サインインユーザーのみ実行できるように制限出来る。

user_signed_in?
# ユーザーがサインインしているかどうかを確認。

current_user
# 現在サインインしているユーザーを指定出来る。
“`
※deviseのmodelが「user」であると仮定します。
それ以外の場合は「user」部分を対応するmodel名に変更して下さい。

### before_action :authenticate_user!
コントローラーの先頭に記述します。ログインンユーザーのみ実行出来るアクションを指定できます。
下記コードでは「new」「create」はログ

元記事を表示

deviseの導入の仕方

# deviseとは
Railsにおいて、ユーザー認証機能を簡単に実装できるgemのこと
gemはRubyのライブラリで、便利な機能をもったプログラムの部品です

# deviseの導入
まずは、gemのインストールをします
Gemfileに以下を追加します
“`ruby:Gemfile
gem ‘devise’
“`
# セットアップ
deviseをセットアップするには、以下の3つのコマンドを実行します

1つ目のコマンドで、railsアプリにdeviseをインストールします
“`command
$ rails generate devise:install
“`

2つ目のコマンドで、ユーザー情報を扱うモデルを作成します
なお、モデル名はUserにしています
“`command
$ rails generate devise User
“`

3つ目のコマンドで、migrationファイルを読み込み、変更点をデータベースに反映させます
“`command
$ rails db:migrate
“`

元記事を表示

Railsチュートリアル8章まとめ

# 目的
ユーザーがログインやログアウトを行えるようにする

# 8.1.1 Sessionsコントローラ
・ログインとログアウトの要素を、Sessionsコントローラの特定のRESTアクションにそれぞれ対応付ける
・ログインのフォームは、newアクションで処理
createアクションにPOSTリクエストを送信してログインする
destroyアクションにDELETEリクエストを送信してログアウトする

・routes.rb
“`
Rails.application.routes.draw do
root “static_pages#home”
get “/help”, to: “static_pages#help”
get “/about”, to: “static_pages#about”
get “/contact”, to: “static_pages#contact”
get “/signup”, to: “users#new”
get “/login”, to: “sessions#new”
po

元記事を表示

Railsチュートリアル7章まとめ

# 目的
ユーザー登録機能を追加する

# 7.1.1 デバッグとRails環境
**・サイトのレイアウトにデバッグ情報を追加**
ビルトインのdebugメソッドとparams変数を使って、各プロフィールページにデバッグ用の情報が表示されるようにする

“`
<%= debug(params) if Rails.env.development? %>



.
.
.

<%= render 'layouts/header' %>

<%= yield %>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>



“`

if Rails.env.development?とすることで
デバッグ情報はRailsの3つのデフォルト環境のうち、開発環境(develo

元記事を表示

OTHERカテゴリの最新記事