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

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

Railsでlink_to deleteが出来ない

某オンラインスクールで学習4ヶ月目、
Railsにてオリジナルwebアプリを作成していて
link_toの”削除”が実行できなくてぐるぐるしたので備忘録として。
 

dpテーブルに投稿したレコードを削除するため実装、削除出来ず。
“`ruby
<%= link_to "報告の削除", dp_path(@dp.id), method: :delete %>
“`
 
エラー画面も出ず、元の画面に戻ってきてしまう。
ログを見るとどうやらGETで動いている模様。
 

参考にした記事
https://qiita.com/mami3sansan/items/6a9710b3ffdc937aa5f3
https://nabelog.org/695/
https://takayuki-inoue.hatenablog.com/entry/2018/01/12/105846
 

その他いくつか読んでみたが、解決に至る糸口が見つからず。
上記記事等から得た知識を元に思い当たる節を探ってみたところ、
作成初期に放り込んでいた、bootstrap絡みの
cssやらjavascriptあたりに要因が

元記事を表示

【Docker】NameError: uninitialized constant Gem::Source 解消法【Rails】

## はじめに
 本記事は、プログラミング初学者、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## NameError: uninitialized constant Gem::Source 解消法
### 状況
以下の内容のDockerfileで`docker build -t <イメージ名> .`実行後、`docker run <イメージ名> rails new .`したところ以前は発生しなかった`NameError: uninitialized constant Gem::Source`が発生しました。

“`Dockerfile:Dockerfile
FROM ruby:3.1.1
ENV APP_NAME=myapp
ENV USER_NAME=myuser
ENV TZ=Asia/Tokyo

WORKDIR /${APP_NAME}

COPY Gemfile /${APP_NAME

元記事を表示

rails seeds.rbファイル とは

# 結論

初期データを作ってくれるファイル。
webアプリのテスト動作などに役に立つらしい。
データを一件入れる場合
“`seeds.rb
モデル名.create!(カラム名:値)
““

* seeds:種

# 具体的な使用例 userモデルオブジェクトの場合

アプリを作り、実際にデータを入れて動かしたい時
データを一件入れる場合
“`seeds.rb
user.create!(name:”倉本”) #!を付けるとエラー画面が表示される。つけないとnilを返すのみ。
““

データを100件入れる場合
“`seeds.rb
100.times do |n|
User.create!(
name:”test#{n+1}”
)
end
“`

# まだテストデータは反映されていない
“`ターミナル.
rails db:seed
“`
これでテストデータが読み込まれます。

# あ、後からテストデータを追加したい時
“`ターミナル.
rails db:migrate:reset
“`
これでテストデータが反映されます。
以上です。

元記事を表示

dbを削除したい

# heroku上のデータベース(pstgrsql)を削除して作り直したい

“`
$ heroku run rails db:reset
rails aborted!
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your ‘production’ database.
If you are sure you want to continue, run the same command with the environment variable:

.
.
.
.
“`

どうやら、production環境の

元記事を表示

whereメソッドを使ってDBから取り出すデータを絞り込む

## 実現したかった実装
送られてくるパラメーターの条件を満たしたデータをDBから取り出す実装をしたくて辿り着きました。

## whereメソッドを使用する
モデル名.where(条件)とする事で条件に一致したデータを取り出せます。

## 行った実装
whereメソッドに渡す引数はハッシュの形でいいことに気づき下記のようなクラスメソッドを書きました。

“`ruby
def self.match_recipes(dates)
hash = {}
dates.each{|key, value|
unless value.blank?
hash[key] = value
end
}
Recipe.where(hash)
end
“`
引数に条件の形となるハッシュを渡します。
“`ruby
dates = {“category_id”=>”1”, “genre_id”=>”1”, “type_id”=>””}
recipe = Recipe.match_recipes(dates)
“`
呼び出しのイ

元記事を表示

file_field_tag と submit_tag を横並びまたは縦並びに調整する

個人的な作業メモ。`erb`ではなく[haml](https://github.com/haml/haml-rails)を使っており、[.col-sn](https://getbootstrap.jp/docs/4.2/layout/grid/)やボタンのスタイルは、Railsの標準としてGemfileとして設定されている`Bootstrap`です。

## 横並び

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/34f00040-b720-2fdd-23fc-5e1edcabcf06.png)

“`haml
= form_tag import_items_path, multipart: true do
= file_field_tag :file, accept: “text/csv”, style: “display: inline;”
= submit_tag “一括編集”, class: “btn btn-success”
“`

## 縦並び

!

元記事を表示

rails require permit メソッドとは

# 結論
データベースに予期せぬ値が入らないように、ユーザーが入力する値を制限するメソッドの一種。
“`~.rb
params.require(テーブル名).permit(カラム名)
“`

* require:  〜を要求する
* permit : 許可を与える

# 具体例

投稿アプリにて、ユーザーがデータを入力し保存されるまでの順序

ユーザーがフォーム(記入欄)に入力
“`new.html.erb
<%= form_with model:@user, url: user_path, method: :post, local: true do |f| %>

 名前 : <%= f.text_field :name %>

<%= f.submit "送信" %>
# model:@user  モデルオブジェクトにユーザーが入力したデータがないか判断する
# url: user_path  入力した値をどこに渡すか指定
# method: :post  入力した値がデータベースにない場合→createアクション
# 入力した値がデータベースにある場合→upda

元記事を表示

【初心者用】rails db:migrateでエラーがでた

# 1.はまったこと
– NOT NULL制約を記述したマイグレーションファイルがちゃんと動作するか確認したい。
“`Ruby:db/migrate/20220401031908_change_tasks_name_not_null.rb
class ChangeTasksNameNotNull < ActiveRecord::Migration[5.2] def change change_column_null :tasks, :name, false end end ``` - terminalで ```rails c```を起動して、Task.nameにnilを入れてみる。 ```Ruby:terminal irb(main):002:0> Task.new(name: nil).save
(0.1ms) begin transaction
Task Create (1.5ms) INSERT INTO “tasks” (“created_at”, “updated_at”) VALUES (?, ?) [[“created_at”, “202

元記事を表示

rails paramsとは

# 結論

ユーザーからの情報を受け取るメソッド
“`
params[カラム名]
“`

*parameter: 設定値

# 具体例

ユーザーがある投稿を削除しようと選択した時、以下の手順で処理を行う。

“`index.html.erb
<%= link_to '削除', "/users/#{user.id}", method: :delete %>
# viewに表示されている`削除ボタン`,url
の指定、HTTPメソッドの指定(delet,patch,get
いずれか)
“`
ユーザーが要求したURLが左、それを右へ渡す。

つまり`HTTPメソッドdelete URL`という`要求`が来たから、その要求を処理するために`users_controllerのdestroyアクション`に`要求`を渡す
“`routes.rb
Rails.application.routes.draw do
delete “/user/:id”, to: “user#destroy”
end
# 要求をコントローラーの`destroy`アクションへ渡す
“`
“`users

元記事を表示

Ruby on Rails 事始め

# 本記事の対象者

これまでのRuby関連の知識として、下記のRuby製のOSSを触ったことがある。

* [Redmine](https://qiita.com/EasyCording/items/123be275d5c12e7c49f6)をSynology-NASで立ち上げることができた → [DSMのDockerを使用](https://qiita.com/EasyCording/items/b93c3e4fe5e44a8b17ac)
* GitlabをAWS-ECサーバーに立てることができた → UBUNTU上のDocker-Composeを使用

これからRubyを学ぶ上での、自分の目標設定

* RubyでWEBページが、サクッと作れること
* Redmineのプラグインが作れること
* Reactのような、最新のマテリアルデザインを取り入れたい
* React-Nativeで、スマホアプリも開発したい

# 反省点

* RORを始めるにあたって、これまで書籍等を読んできたが、そのたびに撤退させられている。
* GEMやBundleといった、Rubyの[環境整備](ht

元記事を表示

rails7でバリデーションエラーで画面が遷移しない場合の解決法

# 環境
Ruby 3.0.2
Rails 7.0.2.3

## 結論:Turboの動作をオフにする

form_withに `data: { turbo: false }` を追加する

“`ruby: new.html.haml (≒ new.html.erb)
= form_with model: @event, data: { turbo: false } do |f|
= f.label :name, ‘イベント名’
= f.text_field :name
“`

## 発生したエラー

バリデーションエラーが発生した際に、画面のリロードが発生せず、コンソールに以下のエラーが表示された。

“`ruby
Error: Form responses must redirect to another location at k.requestSucceededWithResponse
“`

## 問題発生時のコード

“`ruby: new.html.haml (≒ new.html.erb)
= form_with model: @event do

元記事を表示

Amazon ECS & Fargate と Docker on AWS CICDの学習まとめ(超初心者向け)

# これからはAWSのFargateだ!
ということで学習しながら設定の流れをメモとして随時更新します。

学習内容 ECS & Fargate, Load Balancing, Auto Scaling, ECR, CICD for ECS
最終的には、Rubu on Rails をFargateで動かすところまで目指します。

## AWSの準備&ユーザ設定
* AWSのアカウント作成
* IAM ユーザーの設定
ルートユーザ→Adominユーザ
* AWS アクセスの種類を選択(全部選択)
* アクセス許可の設定
→既存のポリシーを直接アタッチを選択
→AmazonECS_FullAccessを選択
* タグの追加 (不要)
* 認証情報(コンソールのサインインリンク保存)
* アクセス権限の追加
→既存のポリシーを直接アタッチを選択
→AdministratorAccess

## Fargateの設定
* リージョンを選択(東京)
* Elastic Container Service (ECS)を選択
* 2022/04時点では、ECS

元記事を表示

【Docker】Rails + Puma + Nginx + MySQL + React

## はじめに
 本記事は、プログラミング初学者、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## Rails + Puma + Nginx + MySQL + React
“`docker-compose.yml
version: ‘${COMPOSE_VER}’
services:
db:
platform: linux/x86_64
build: ./docker/db
command: –default-authentication-plugin=mysql_native_password && bash -c “chmod +x /docker-entrypoint-initdb.d/00_grant.sh”
healthcheck:
test: mysqladmin ping -h db -u$${MYSQL_USER} -p$${M

元記事を表示

ActiveStorageで管理するファイルをCloudFront署名付きCookieで限定配信

## この記事について

[以前の投稿](https://qiita.com/zagvym/items/a4f0524c94007317ac95) で、ActiveStorage-S3によるダイレクトアップロードについて調査しました。
その際、併せて「S3にアップロードされた画像ファイルをCDN経由で配信する方法」を調査・検討したので、その記録を記事にしました。

なお、アップロードされたファイルは一般に公開せず配信先を限定する必要があったため、AWS CloudFrontの[署名付きCookie](https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-cookies.html)を利用して配信するようにしました。
そのシステム構成の概要と、Rails app側への改修例を記載します。

https://qiita.com/zagvym/items/a4f0524c94007317ac95

## 前提条件

まず、ユーザがプロフィール画像を任意にアッ

元記事を表示

【Rails】Cloud9でRuby on Railsの環境構築

## この記事でわかること
Cloud9で1からRailsの環境構築を行います。
今回インストールするRailsのバージョンは`6.1.5`です。

## 準備
ボリュームのサイズは30GiBに設定しています。

# Railsと必要なソフトウェアをインストールする
## シェルスクリプトのダウンロード
まず、以下のコマンドを実行して、必要なソフトウェアのインストールコマンドが書かれたファイル(シェルスクリプト)をダウンロードします。
“`bash
$ wget https://wals.s3.ap-northeast-1.amazonaws.com/curriculum/rails/environment.sh
“`
##### wgetとは
wgetとはコマンドの一種で、指定されたURLのファイルをダウンロードするという役割があります。このコマンドを実行した後にフォルダを確認すると、**environment.sh**というファイルがダウンロードされています。

## シェルスクリプトを実行
以下のコマンドを実行して、ソフトウェアをインストールします。
`sh e`まで打って

元記事を表示

本番環境をRails6.0からRails7.0へアップグレード

今回、自社サービスの本番環境を Rails 6.0 から Rails 7.0 へアップグレードしましたので、その備忘録として書き留めておきたいと思います。

サービスを展開してるサイトですが、リクエストベースで1分間に約6000リクエスト程度が発生するサイトになります。
そこへ、Ruby 3.1.1 + Rails7.0.2.2 (作業時点の最新)の導入を行いました。

アップグレードの手順自体は、いろいろな方がQiita等で説明されていると思いますので、ここでは、実際に対応が必要だったポイントを残しておきたいと思います。

## 対象
・同じくRailsのアップグレードと戦うのエンジニアの方
・アップグレードしないとダメだよねー。と思いつつも、華麗にスルーされている方

## 手順
基本的な進め方は「[Rails アップグレードガイド](https://railsguides.jp/upgrading_ruby_on_rails.html “Rails アップグレードガイド”)」をそのまま参考にさせて頂きました。
結果、問題なくアップグレードでき、本番環境へリリース出来ましたので、

元記事を表示

Rails初心者がActiveStorage-S3 Variantについて調べてみた

## この記事について

以前に ActiveStorage-S3のダイレクトアップロード関連調査時に、ついでに調べた ActiveStorage の Variant 挙動についてまとめました。
特に、S3へのファイル保存時にどうしても任意のprefixをつけたかったので、その点を中心に調査を行いました。
初心者なので本当にそれでいいかはわからないですが、とりあえず意図したprefixをつける方法を見つけたので、記録に残します。

https://qiita.com/zagvym/items/a4f0524c94007317ac95

### 調査時環境

– Rails ~> v6.1
– ruby ~> v3.0
– aws-sdk-s3 >= v1.112,

元記事を表示

Rails初心者がActiveStorage-S3について調べてみた

## この記事について

[Rails Active Storage](https://guides.rubyonrails.org/v6.1/active_storage_overview.html) のストレージサービスとして AWS S3 を設定する場合の仕様や挙動確認の記録です。
特に、署名付きURLを利用したS3へのダイレクトアップロードとその関連部を中心に調査を実施しました。

調査の結果、S3へのファイル設置に癖があったため、その挙動の詳細と対応策についても記載します。

### 調査時環境

– Rails ~> v6.1
– ruby ~> v3.0
– aws-sdk-s3 >= v1.112,

元記事を表示

RailsのMongoidのモデルをCSVに出力する

以下のコードの変数modelsに出力したいモデルを設定して保存します。
rails runnerで第1引数に出力先ディレクトリを設定して実行してください。

“`ruby
# CSVに出力したいモデルを指定してください
models = [Model1, Model2, Model3]

# スクリプト実行時、第1引数に出力先ディレクトリを指定してください
dir = ARGV[0]

models.each do |model|
file = “#{model.to_s.pluralize.underscore}.csv”

CSV.open(File.join(dir, file), “wb”) do |csv|
fields = model.fields.map {|f| f[0]}.sort
csv << fields model.each do |row| values = fields.map {|f| row[f]} csv << values end end end ``` # 環境 動作確認に

元記事を表示

rails createアクションとは

# 結論
モデルのインスタンス生成と同時にデータベースに保存するメソッドのこと。
“`.rb
def create
モデルクラス名.create(引数)# 引数はハッシュ{}は省略可
end
“`
以上です。

元記事を表示

OTHERカテゴリの最新記事