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

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

②ストロングパラメーターについて

本日はストロングパラメーターについて投稿します。

○ストロングパラメーターとは

Ruby on rilsのアプリケーションにおいて不正なデータを取得しないように指定する
アプリ内の警備員みたいなもの。(例えが間違っていたらすいません。。):sweat_smile:

ストロングパラメーターを使う為には2つのメソッドを使用します。

①require(リクワイア)メソッド

送信されたパラメーターの情報を持つparamsが使用出来るメソッドの事。
パラメーターからどの情報を取得するか選択する事が出来る。
使い方
““`
paras.require(:モデル名)
““`

さらに指定したパラーメーターをより限定した時に使うのがpermitメソッドです。

②parmitメソッド

requieメソッドと同じでparamsが使用出来るメソッド。
取得したいキーを指定出来て、その中の値のセットのみ取得出来る。
使い方
““`
params.require(:モデル名).parmit(キー名)
““`

まだ僕自身ざっくりな理解ですが日々アウト

元記事を表示

【Railsアプリケーション】Heroku、AWS S3、Active Storageの設定

# はじめに

Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。

# Heroku上でアプリケーションを稼働させる

Railsアプリケーションでアップロードした画像がAWS S3に保存されるように設定し、そのアプリケーションをHeroku上で本番稼働させる想定で記載する。

`Active Storage`の実行環境、AWSのアカウント情報、およびS3のバケット作成などは済んでいる前提で記載する。

# `storage.yml`の編集

設定ファイルにAWSのアカウント情報および、S3のバケット情報を記載する。

### ※AWSのアカウント情報やS3のバケット情報などについては、セキュリティ的な観点から環境変数に持たせて読み込むようにする。

### `config/storage.yml`

“`yaml
# Use rails credentials:edit to set the AWS secrets (

元記事を表示

【Railsアプリケーション】Herokuへデプロイして本番稼働する

# はじめに

Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。

# RilasアプリケーションをHeroku環境で本番稼働する

下記の前提とする。

– `Heroku CLI`の実行環境があり、`Heroku`上にリポジトリがある
– AWS CLIの設定が完了している

# Heroku上のリポジトリ情報を確認する

### `Heroku`上のリポジトリ情報を確認する

“`bash
heroku info -a Heroku上のアプリケーション名
“`

### 実行結果

“`bash
% heroku info -a rails-app
=== rails-app
Auto Cert Mgmt: false
Collaborators: rails-app@gmail.com
Dynos:
Git URL: https://git.heroku.com/rails

元記事を表示

ジェネレータの設定

# ジェネレータ設定について

> ソースコードの雛形を生成するジェネレータという機能があります。

> 自動的にコントローラやビューファイルを生成してくれるのですが、自動的に生成しない様に設定を行います。

“` config/application.rb
module TaskApp
class Application < Rails::Application config.load_defaults 6.0 config.generators do |g| g.skip_routes true #routes.rbの変更されず g.helper false #ヘルパーファイルの生成せず g.assets false #css,JavaScriptファイル生成せず g.test_framework :rspec #testファイル生成せず g.controller_specs false #specs_controller生成せず

元記事を表示

Rails apiモードでjsonではなく文字列を返す方法

Rails apiモードで、jsonではなく文字列(string)を返却したい時の方法について記載する。

あまり使わない方法だと思うが、
先日token(string)のみを返すエンドポイントを作成する必要があり、
方法がわからず困ったのでメモ的に残す。

# 返したい値
今回やりたいイメージ。returnを使うわけではないがイメージとしてわかりやすいので。
“`ruby:string(ただの文字列)
return token
“`

通常だとこういう形式になる。
“`ruby:json(普通はこの形式で値を返す)
return { “token” : “token” }
“`

# 方法
renderメソッドで `:json => “文字列”` とする
“`ruby:controller.rb
render :json => ‘This is the string’
“`

元記事を表示

日付や数値のフォーマット

# はじめに

Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。

# フォーマット指定による変換

日付や時刻、数値を書式を指定して文字列にする場合の記述方法について解説。

(Rubyの`Date`や`DateTime`などの日付型の値や、`Integer`、`Float`などの数値をフォーマット指定で文字列に変換する記述方法について)

# 日付のフォーマット

Rubyで日付型をフォーマット指定で文字列に変換するときは、`strftime`メソッドを使用する。

`strftime`メソッドは日付を扱う`Date`クラス、時間を扱う`Time`クラス、日時を扱う`DateTime`クラス全てに適用できる。

### `strftime`メソッド構文

“`ruby
Date.strftime([“format文字列”])
Time.strftime([“format文字列”])
DateTime.strftime

元記事を表示

[軽量化] マルチステージビルドによるrails環境のdocker化

## rails環境のdocker化

rails環境のdocker化についてまとめます。
dockerの軽量化のためにマルチステージビルドで環境を構築します。

### 各種バージョン
– rails 6.0.6.1
– ruby 3.0.2
– node 15.0.1
– postgresql 14.6-alpine

### Dockerfileの作成
リポジトリに `dockerfile` を作成。`apt-get install` を使用せずに下記のようにマルチステージビルドでnodeをインストールすることで、dockerの軽量化およびbuildの時間短縮が期待できます。

“` docker
FROM node:15.0.1
FROM ruby:3.0.2

COPY –from=node /opt/yarn-* /opt/yarn
COPY –from=node /usr/local/bin/node /usr/local/bin/
COPY –from=node /usr/local/lib/node_modules/ /usr/local/lib/node

元記事を表示

Ruby if, elseを使ったプログラムの作成

# if, elseを使ってプログラムを作成します

条件は以下の通りです。
– 条件1:第一引数にオウムが鳴く場合はtrueを指定し、鳴かないfalseを指定する
– 条件2:第二引数には時間を指定する(ただし、「分」は考えないものとする)
– 条件3:20時から翌朝7時までの間にオウムが鳴いた場合は「NG」と出力する(20時と7時は含まれない)
– 条件4:上記以外の場合は「OK」と出力する

“`ruby
def parrot_trouble(talking, hour)
if talking && (hour < 7 || hour > 20)
puts “NG”
else
puts “OK”
end
end

# 呼び出し例
parrot_trouble(true, 6)
“`

“`ruby
NG
# ターミナル出力
“`

## 解説
オウムが鳴いている時間帯が20時〜7時 → NG
上記以外の場合にはOKを出力されるように記述を考えていきます。

– 第一引数”talking”について

オウムが鳴いているか・鳴いていないかの真偽判定

元記事を表示

[Rails]コントローラ、ルーティング、ビュー、モデルの記述ルール

## はじめに
コントローラ、ルーティング、ビュー、モデルを作る際のルールをざっくりまとめてみようと思う

## コントローラでの命名規則
– コントローラ名は全て複数形かつ全て小文字
– Railsはコントローラ作成と同時に、必要なviewファイルの作成や記述の追加ができる
“`rb
$ rails g controller コントローラ名 アクション名
“`

## ルーティングのルール(基本編)
“`rb
HTTPメソッド ‘URL’ => ‘コントローラ#アクション’
“`
URLと’コントローラ名#アクション名’の形が同じ場合は省略可能↓
“`rb
get ‘homes/top’
“`

#### 代表的なHTTPメソッド
– GET(リソースの取得、画面表示)
– POST(リソースの更新、リソースへのデータ追加 など)
– DELETE(リソースの削除)

## ビューでの命名規則
– ビューファイルの名前は、アクション名と同じ名前にする

## モデルでの命名規則
– モデル名 → 先頭は英大文字/単数形
– モデルのファイル名 → 先頭は英小文字/単数形

元記事を表示

【Ruby on Rails】Dockerからコンソールを起動させる方法

# 背景
Dockerを用いたチーム開発でターミナルから直接`rails c`を実行してもコンソールを起動できない。
“` :コンソール
$ rails c
=>
Rails is not currently installed on this system. To get the latest version, simply type:

$ sudo gem install rails

You can then rerun your “rails” command.
“`

# 方法
下記の順番で実行する。
“` :コンソール
$ Docker compose up -d
$ Docker compose run –rm api bash
bash-5.1# rails c
“`
`$ Docker compose up -d`
まず作成したコンテナを起動する。
`$ Docker compose run –rm api bash`
apiサービスを開始し、サービス内でbashとしてコマンドを実行する。

# 参考

https://docs.do

元記事を表示

【rails】seedやコンソールを使わず環境変数で管理者権限を実装する。(脳筋)

# 経緯
管理者権限機能を実装する際に管理者ユーザーをseed.rbに初期レコードとして入れる手法を使っていたのですが、[Fly.io]( https://fly.io/ “Fly.io”)の無料プランでリリースしようとすると、、、、、
まさかの本番環境のコンソールを開くことが出来ない事態。。。。。

という事で管理者権限ぽいのを環境変数を使って実装しよかなという次第です。

# 前提
`gem device`と`gem dotenv-rails`を導入済み

投稿用のコントローラーとして`posts_controller.rb`
投稿用のモデルとして`Postモデル`を使用しています。

# この記事での想定している状況
管理者ユーザーのみ投稿編集削除できる。
管理者以外のユーザーは各投稿の閲覧のみ。

# 実装
.envファイルの記述
コントローラーの記述
viewファイルの記述

## ①.envファイルの記述

“`:.env
~省略~
ADMIN_EMAIL=管理者ユーザーのemailアドレス
例)ADMIN_EMAIL=adminuser@gmail.com
“`
`A

元記事を表示

[Rails]アプリケーション作成、サーバー立ち上げる

## はじめに
Ruby on Railsで新規アプリケーションを作成して表示してみる

## Railsの雛形を作成する
– 新規で作成する際は↓
(アプリケーションの基本形が作成される)

“`rb
username:~/environment $ rails new アプリケーション名
“`
– アプリケーションを削除する際は↓
(ファイルやフォルダを削除するコマンド)

“`rb
username:~/environment $ rm -rf アプリケーション名
“`

## サーバーを立ち上げる流れ

– 最初に自分のアプリケーションに移動する
cdコマンドで移動↓

“`rb
username:~/environment $ cd アプリケーション名
“`
移動してパス表記が変わるのを確認↓
“`rb
username:~/environment/アプリケーション名 $
“`

– サーバーを立ち上げる
  $ rails s の  ”s” は”server”の略↓

“`rb
username:~/environment $ rails s
“`

元記事を表示

【個人開発】駆け出しエンジニアのポートフォリオ作りを手助けするサービスを作りました

# はじめに

**駆け出しエンジニアのみなさん、ポートフォリオ作りに悩んでいませんか??**

アイデア出しからサービス設計、技術選定にデザイン・実装、さらには運用などなど…

個人開発(ポートフォリオ作り)にはこのように乗り越えるべき壁がいくつも存在していて、それなりのものをちゃんと作ろうとするとかなり大変です。

**特に初めてポートフォリオを作るような駆け出しエンジニアの場合、最初のアイデア出しの段階で挫折してしまう人も少なからずいるでしょう。**
(何を隠そう、かつての自分もそうでした。)

**一方で、そんな個人開発に悩める人たちを救うべく世の中には先人たちが残した素晴らしい技術記事がたくさん存在しています。**

例えば
– [【個人開発・ポートフォリオに】無料で簡単にいい感じのデザインにできるサービスまとめ](https://qiita.com/aiandrox/items/4196c8f5b564d29fdce7)
– [ポートフォリオや個人開発で使えそうなアイデア](https://qiita.com/MasatoraAtarashi/items/ee

元記事を表示

[Rails] Active Jobをロックしたい

# はじめに

[Active Job](https://railsguides.jp/active_job_basics.html) にてRailsバックグラウンドジョブを実行する際の、排他制御(ロック)に関するメモ

目的: **ジョブのキューイング自体をロックしたい**
(ジョブの処理をロックするだけではなく、そもそもEnqueしない)

https://qiita.com/tatsurou313/items/d3664f8dda05dcd12d56#active-job-%E3%81%AB%E5%87%A6%E7%90%86%E3%82%92%E8%A8%98%E8%BF%B0%E3%81%99%E3%82%8B

Active Job自体の使い方は↑こちらの記事を大いに参考にしています。
(ジョブ内での処理のロック方法は、こちらにも記載されています)

## 環境
Ruby on Rails (最近6.0系にアップデート), MySQL
* scheduler が各ジョブを時間ごとに管理し
* Redis がジョブのキューを保持し
* Resque がキューをもとにジョブを管

元記事を表示

[Rails] WEBアプリケーションを作るにあたっての基礎の基礎を整理してみる

## はじめに
某有名プログラミングスクールを卒業後、スピードメインで授業を進めてしまった私はもう少し基礎の基礎を見直したいと感じた為、投稿を残していこうと思います。

## ルーティング、コントローラ、モデルの役割とは
大前提としてページを表示させる流れがいまいちだと
アプリケーションを作る際に、何がなんだかわからなくと思います。

### ルーティングの役割:point_up_tone1:
ユーザーがURLにアクセスした時に、要望を最初に受け取るのがルーティング!
受け取った内容によって、どのコントローラのどの処理を実行するかを判断して実行してくれる

### コントローラの役割:point_up_tone1:
ルーティングで判断された内容を元に、処理を実行して対応する画面を表示させる

#### ページを表示させるまでの流れ
ユーザーがURLにアクセス

ルーティングがユーザーの要望を受け取る→受け取った要望をの内容をコントローラへ

コントローラがビューに受け渡すインスタンス変数を定義→表示するビューファイル指定

### モデルの役割:point_up_tone

元記事を表示

Rails + curl – POST送信したファイルの中身を取得する例 ( ActionDispatch )

# curl コマンドの例

任意のキー ( ここではfoo ) に対してファイルパスを指定してPOSTする

“`
curl -X POST http://localhost/file -F foo=@/path/to/file
“`

# Rails Controller

paramsのキーにActionDispatchのインスタンスが関連付けられるので read すればファイル内容が得られる

“`rb
class FileController < ApplicationController def create params[:foo] # ActionDispatchのインスタンス params[:foo].read # ファイルの中身 end end ``` # チャットメンバー募集 何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。 https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ # Twitter https://twitt

元記事を表示

クラスの関連付け

# 2.1 belongs_to関連付け
あるモデルでbelongs_to関連付けを行なうと、“`他方のモデルとの間に「1対1」のつながり“`が設定されます。このとき、宣言を行ったモデルのすべてのインスタンスは、“`他方のモデルのインスタンスに文字どおり「従属(belongs to)」“`します。
たとえば、Railsアプリケーションに著者(Author)と書籍(Book)情報が含まれており、書籍1冊につき正確に1人の著者を割り当てたいのであれば、Bookモデルで以下のように宣言します。
“`rb
class Book < ApplicationRecord belongs_to :author end ``` . . . ```belongs_toを単独で利用すると、一方向のみの「1対1」つながり```が生成されます。 つまり上の例で言うと、「個別の書籍はその著者を知っている」状態になりますが、「著者は自分の書籍について知らない」状態になります。 ```双方向関連付けをセットアップするには、belongs_to関連付けを使うときに相手側のモデルにhas_oneまたはh

元記事を表示

パーシャルにローカル変数を渡す

# はじめに
Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。

# パーシャル呼び出し時に変数を渡す

パーシャルを呼び出す際に使用する変数を以下のようにして渡すことができる。

下記の基本形の記述は、「インスタンス変数`@product`を、パーシャル内のローカル変数`product`として渡す」という意味。

これによりパーシャル内ではローカル変数「`product`」を利用することができる。

### パーシャル呼び出し時の記述

“`ruby
# 基本形
<%= render 'title', locals: { product: @product } %>

# 短縮系で記載する
<%= render 'title', product: @product %>

“`

# 呼び出されたパーシャル内ではローカル変数を使用する

パーシャルにローカル変数を渡さず、直接インスタンス変数を参照することもできる。

元記事を表示

パーシャルを使ってヘッダーやフッターを共通化する

# はじめに
Railsなどを中心に勉強中のエンジニア初心者が他の記事を参考にしたり、実際に実装してみたりして、アウトプットの一環としてまとめたものです。
間違っていることもあると思われるので、その際は指摘いただけると幸いです。

# パーシャルを使う

パーシャル(部分テンプレート)は、レンダリング処理を扱いやすい単位に分割する仕組み。

パーシャルを使うとレスポンスで表示するページの特定部分をレンダリングするコートを別ファイルに切り出すことができる。

### パーシャルを呼び出す

パーシャルをビューの一部としてレンダリングするには、`render`メソッドを使う。

以下の例では、`_test.html.erb`というファイルをレンダリングする。

> パーシャルファイルはファイル名の冒頭にアンダースコアが付いていて、他のビューファイルと区別される
>

“`ruby
# _test.html.erbというファイルをレンダリングする
<%= render "test" %>
“`

下記の場合は、_test.html.erbという名前のファイルをレンダリングする。

##

元記事を表示

ぼっち演算子とnil?、blank?を組み合わせるとnilのときに結果が逆になる罠

考えてみればそのとおりだけども、ちょっとハマったのでメモがてら。

ぼっち演算子については[safe navigation operator (ぼっち演算子)](https://docs.ruby-lang.org/ja/latest/doc/news=2f2_3_0.html)を参照。

rubyのぼっち演算子が便利なのでよく使うのですが、
条件分岐させるときに注意が必要です。

“`ruby
# hogeはnameというインスタンス変数を持つオブジェクトとします
hoge.name.blank? ? ‘空です’ : ‘空じゃないです’
“`

みたいな判定のときに

“`ruby
hoge.name = ‘値あり’
hoge.name&.blank? ? ‘空です’ : ‘空じゃないです’
#=> ‘空じゃないです’

hoge.name = ”
hoge.name&.blank? ? ‘空です’ : ‘空じゃないです’
#=> ‘空です’

hoge.name = nil
hoge.name&.blank? ? ‘空です’ : ‘空じゃないです’
#=> ‘空じゃな

元記事を表示

OTHERカテゴリの最新記事