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

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

Railsプレイヤーと一緒に仕事をするWebデザイナー向けのノート

# 目的
Railsでサーバーサイド設計をしている僕が、Webデザイナーの方とチームを組んで1つのWebアプリを作ることになりました。
相手の方はWebデザイナーとして十分な実力を持っていますが、サーバーサイドエンジニアと一緒に仕事をするのは初めてということでしたので、Railで作成したWebアプリがどのようになっているのかをまとめたいと思います。

# 準備
実際に作業に入る前に、まずは一緒に仕事をする準備をしましょう。

## Rails環境を構築する
RailsでWebアプリを動かす(ローカルサーバ上でアプリを走らせる)には、Rails環境が必要になります。
下記記事を参考に、`rails s`でローカルサーバを立ち上げられるようにしておいてください。
[Ruby on Railsの環境構築をしてみよう!(Windows)](https://prog-8.com/docs/rails-env-win)

## gitでプロジェクトを共有
まずはgitでプロジェクトを共有します。
こちらの記事を参考に、自分のレポジトリにプロジェクトフォルダを作成してください。
[GitHub で他

元記事を表示

【rails】【rspec】RspecでRails のActionMailer の本文をテストする

## はじめに
未経験からエンジニアに転職して、4ヶ月ほど経つエンジニアです。
RspecでRails のActionMailer のメール本文に期待通りの文章が表示されているかどうか
をテストする方法についてです。

![アイコンバー.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916052/61a0d3ee-6ff7-f4ca-bb00-622c3c99cfa5.jpeg)

## 結論
~~~ruby
expect(ActionMailer::Base.deliveries.last.html_part.body.to_s).to match(“メール本文の内容を書きます”)
~~~
上記のように↓を使うとテストできます。
~~~ruby
expext(XXXX.html_part.body.to_s).to match(“”)
~~~

## 具体例
~~~ruby
# models/send_mail.rb
def send_mail
# メールを送信する処理
mail.deli

元記事を表示

【Rails】【Ruby】decoratorでHTMLのタグを作る【初心者】

## はじめに
未経験からエンジニアに転職して、4ヶ月ほど経つエンジニアです。
![アイコンバー.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916052/61a0d3ee-6ff7-f4ca-bb00-622c3c99cfa5.jpeg)

今回は decorator で HTMのタグを作る方法を手短に紹介します。
rails の gem ‘draper’ を使用しています。

~~~ruby
def user_status_tag
h.tag.span class: “[text-weight-bold”] do
# 描画したい文字や変数、メソッドなど
end
end
~~~

↓に使いたいHTMLのタグを続ければOKです。↑ではspanを使っています。
~~~ruby
h.tag.HTMLのタグ名
~~~

↓のようにスタイルを当てることもできます。
~~~ruby
class: “[text-weight-bold”]
~~~

## 最後に
今回は decorator

元記事を表示

HTMLの基礎知識(YoutudeのURL 投稿と反映)

みなさん今日もプログラミングの学習お疲れ様です!!

今回はYoutudeの動画を投稿し、それを詳細ページに反映する機能を実装していきます!!:sunny:

Step1:モデルを作成

“`ruby:ターミナル
rails generate migration AddYoutubeUrlToTweets youtube_url:string
“`

“`ruby:ターミナル
rails db:migrate
“`

Step2:コントローラーの追加

“`ruby:tweets_controller.rb
private
def register_params
params.require(:register).permit(:youtube_url)
end
“`

Step3:newにyoutude_urlのデータを追加

“`ruby:tweets_new/html.erb
<%= @tweet.label :youtube_url %>
<%= @tweet.t

元記事を表示

基本的なRailsの文法

## はじめに

ドットインストールにてRailsを勉強しているのですが、知識を記憶に定着させるため、学んだこと、調べたこと、自分で考えたことなどを書いていきます。
何かご指摘があれば教えていただければ幸いです!

## 環境

Ruby: 2.6.5p114
Rails: 5.1.7
教材内のバージョンに合わせました。

## ログファイルの場所

“`ruby
log/development.log
“`

## モデル作成

“`:zsh
rails g model Post title:string body:text
“`

Modelは個々のデータ構造を定義するので、Postのように単数形になる。

上記を実行した後、いろいろなファイルが作成され、今作ったデータの構造をデータベースに反映させるには、下記を実行する。

“`:zsh
rails db:migrate
“`

## データベースを使う

“`:zsh
rails dbconsole # rails dbと省略できる
.tables # 存在するテーブルを見る
“`

## 初期データの流し込み

元記事を表示

HTMLの基礎知識(星評価の平均)

今日もプログラミングしていますか?:sunny:

今回は星機能の平均の出し方を実装していきたいと思います!!

*注意
ここでは以下の詳細ページの実装が大前提となっております!!!

“https://qiita.com/tomo089/items/246230912c32aa5c7864”

Step1:コントローラーの追加

“`:tweets_controller.rb
def show
@register = Register.find(params[:id])

@reviews = @register.reviews
@review = Review.new
    #変更箇所
@totals=@reviews.average(:eve)
    #ここまで

end
“`

Step2:Viewの追加

“`:tweets_show.html.erb.

平均評価

【Ruby on Rails】ポケモンゲットだぜ!!

::: note
本投稿はPoke API使ってポケモンを検索し、
それをゲットだぜ!することで、DBに保存する、というアプリを作成していきます。

尚、[Goorm](https://ide.goorm.io/)を使用します。
環境構築の仕方はこちらを参考にしてください。 ↓↓
[Before Rails Tutorial1章 Goormでの環境構築](https://qiita.com/earth660/items/a51874eba618e2aa5ce6)
:::

# PokeAPIについて
[Poke API](https://pokeapi.co/)にはポケモン関連のデータが大量にあります。
トップページでAPIを簡単に試せるようになっているので、ぜひ触ってみてください。
なお、今回作るアプリケーションでは取得できるデータのほんの一部しか使いません。

# 実装の前に
Goormでプロジェクトを構築していると、すでにプロジェクトフォルダが作成されていると思います。
![スクリーンショット 2022-07-22 16.08.29.png](https://qiita-ima

元記事を表示

ruby on rails 5

$ rails new tweet_app
railsで開発を始めるコマンド。
アプリケーション名と同名のフォルダが作成され、その中に開発で必要なフォルダやファイルが用意される。
app/アプリケーションのメインフォルダ
config/設定情報に関するフォルダ
db/データベースに関するフォルダ など……..

$ rails server サーバーの起動
開発中のアプリケーションをブラウザに表示させるために行う。

$ rails generate controller home top
topというページを作成するためのコマンド
このコマンドを実行すると、新しいWebページが自動で作られ、
「localhost:3000/home/top」というURLにアクセスできるようになります。

なぜコマンドだけでページができるのか
→ページを表示するために必要なファイルが作られていた。 
 railsでは三つのファイルが必要である
①view…ページの見た目を作るためのHTMLファイル
app/views/|home/top.html.erb| rails generate

元記事を表示

【Ruby on Rails】Slimでコメントアウトする方法

## Slimでコメントアウトする方法
“`
/
.card-body
h5 ゴリラ
“`
このように“/“を記述すると、“/“より下のコードについてはコメントアウトされ、画面で確認をすると非表示となる。

元記事を表示

Ruby on rails メモ①

### はじめに

記事を書くのは今回が初めての投稿です。
私は今エンジニア転職を目指して独学中なのですが、
色々な文献を見ているとアウトプットとしてQiitaなどに投稿すると知識の定着が図れるとのことなので、
早速やってみます笑

### 直面した問題

現時点でprogateとRaisチュートリアルで勉強してきましたがroutesファイルの表記が違うんです!

例えばusersアクションのルーティングの記述について

こちらがRailsチュートリアル↓
“`
Rails.application.routes.draw do

resource :users

end
“`
  
そしてこちらがprogate↓
“`
Rails.application.routes.draw do

post “users/create” => “users#create”
get “signup” => “users#new”

end
“`

えーーー!progateと違うじゃん!!!ってなりました笑
  
というのもRESTfulなUsersリソースを作成するためにresourcesメ

元記事を表示

bundle install 時の idn-ruby エラー

## エラー内容
環境構築時の`bundle install` で `idn-ruby`に関するエラーに遭遇。

“`
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory: /Users/ynamiki/Desktop/sora/vendor/bundle/ruby/2.6.0/gems/idn-ruby-0.1.0/ext
/Users/ynamiki/.rbenv/versions/2.6.6/bin/ruby -I /Users/ynamiki/.rbenv/versions/2.6.6/lib/ruby/site_ruby/2.6.0 -r ./siteconf20220722-10264-bfer1i.rb extconf.rb
checking for -lidn… no
ERROR: could not find idn library!

Please install the GNU IDN library or alternati

元記事を表示

ログインの有無でアクセス制限をする方法【Rails】

# 目的
SNSサイトにて、ログインの有無でアクセス制限したいときの処理をメモにまとめます。

# サイト構成
作成したサイトの構成は下記です。

“`ruby:routes.rb
# ログイン中はアクセス制限
get “/” => “users#login_form”
post “/login” =>”users#login”
get “/new” => “users#new”
post “/users/create” => “users#create”

# ログアウト中はアクセス制限
get “/edit/:id” => “users#edit”
post “/users/update/:id” => “users#update”
post “/logout” => “users#logout”
“`

# current_userの準備
ログイン中のユーザーを`@current_user`で定義します。
これは全てのコントローラで使用する変数なので、`application_controller`で定義し、`before_action`に設定します。

“`ruby:ap

元記事を表示

【Rails】APIモードかつクロスオリジン間でCookieやSessionを使う方法【SPA】

# 環境
– Ruby 3.1.2
– Rails 6.1.6
– Vite 2.9.9
– Vue 3.2.25
– Docker
– Google Chrome (バージョン:103.0.5060.53)

# 前提
– RailsはAPIモードで使用
– フロントエンドとバックエンド間は異なるオリジンでの通信

# やり方
APIモードで起動したRailsはそのままではCookieを使うことができません。
なので、まずCookieを使うことができるようにします。

“`ruby:app/controllers/application_controller.rb
class ApplicationController < ActionController::API include ActionController::Cookies # 追加 ``` ```ruby:config/application.rb module App class Application < Rails::Application # ... config.middleware.

元記事を表示

Rails6でrails generate scaffoldすると`Unknown alias: default (Psych::BadAlias)`とエラーが出る

## 結論

Gemfileで`webpacker`のバージョンを `~> 5.0`と指定すればエラーが出なくなる。
なぜかはわからない。

## 詳細
### やりたかったこと
Railsアプリでscaffoldを使ってリソースを作りたかった。

### 環境
– ruby 3.1.2
– rails 6.1.6
– bundle 2.2.17

### やったこと
基本的にRailsチュートリアル第2章に従っています。
1. `rails new toy_app`でアプリを生成、`cd toy_app`で移動
1. Gemfileを下記のように書き換え
1. `bundle config set –local without ‘production’`で設定
1. `bundle install`でgemのインストール
1. `rails webpacker:install`
1. `rails generate scaffold User name:string email:string`でリソースを作ろうとする

“` Gemfile
source ‘https://rub

元記事を表示

orderメソッドについてまとめ

## はじめに
初心者なりにまとめたものになりますので、間違いにお気づきの方は、お手数ですが、コメント頂けると幸いです。

内容は、Orderメソッドのまとめになります。

## 目次
– orderメソッド の雛形
– orderメソッド 並び順のオプション
– orderメソッドとallメソッド

## orderメソッド の雛形
変数 = モデル名.order(“カラム名”)
変数:お好みの変数を定義する
モデル名:並び替えたいテーブルを管理するモデルの名前
カラム名:並び替えさせたいカラムの名前

例.
テーブル名: mail
カラム名:id, title, content, user_id, created_at, update_at
mailテーブルのuser_idで並び替えさせたい場合は、以下となります。

hoge = Mail.order(“user_id”)

## orderメソッド 並び順のオプション
hoge = Mail.order(“user_id ASC”)
hoge = Mail.order(“user_id

元記事を表示

Rails7のActionMailerでメールを送ろうとすると`500 Internal Server Error`が出る

## 結論
Railsのバージョンを7.0.2.4以降にすれば解決します。

Rails 7.0.2.4未満に存在するバグだそうです。
本家のリポジトリに同じようなissueが立っていました。
https://github.com/rails/rails/issues/44161

## 詳細
### 環境
– ruby 3.1.2
– rails 7.0.2.3

### やりたかったこと
[Ruby on Railsチュートリアル](https://railstutorial.jp/)に従ってwebアプリを作ってherokuにデプロイし、本番環境からMailgunを使ってアカウント有効化用のメールを送りたかった。

### やったこと
1. `rails generate mailer UserMailer account_activation`で、アカウント有効化メールを送るメソッドを持つMailerを作った
1. `ApplicationMailer`の`default from`を適切なメールアドレスに書き換えた
1. `app/views/user_mailer/ac

元記事を表示

Rails 7.0でないとActiveStorageのvariantに名前をつけられない

# 原因はバージョン
Rails 6.1を使ってるのにRails 7.0向けのガイドを見てました。昨日上司に「バージョン違いに気をつけてね」って言われたばかり!!

教えてもらってなかったらもっとハマってたはず…

# 困ったこと

ActiveStorageを使用して画像を保存することに挑戦していました。[Railsガイド](https://railsguides.jp/active_storage_overview.html#has-one-attached)を読みながら、セットアップや保存処理までは実装できましたが、画像サイズを調整する以下の記述がうまくいきませんでした…。

“`ruby
# Railsガイド ActiveStorageの概要 has_attached_oneより引用

class User < ApplicationRecord has_one_attached :avatar do |attachable| attachable.variant :thumb, resize_to_limit: [100, 100] end end ```

元記事を表示

【Rails】Herokuにデプロイしたら検索機能(LIKE関数)が使えなかった【PostgreSQL】

# 環境
Ruby: 2.6.5
Ruby on Rails: 5.2.4.2
heroku: 7.60.2
PostgreSQL: 14.1

**開発環境**
Cloud9
SQLite3: 3.7.17

# 問題
Cloud9で開発後、herokuにデプロイし、ECサイトの商品検索機能を使ったところ、次の画面に遷移しました。
![スクリーンショット 2022-07-19 18.34.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575953/7aac804a-a2dd-1bcd-5077-cc586a1c5829.png)

“`
We’re sorry, but something went wrong.
If you are the application owner check the logs for more information.
“`
開発環境では動いていたのに、、、

# 原因
`heroku logs -t`コマンドでログを見ると、以下のエラーとヒントが吐かれてい

元記事を表示

カラムの値ごとにeach文を回す方法【Rails】

# 目的
hogesテーブルをジャンルごとに分けて出力したい。

# 目標物の確認
今回作成したいページはこのような見た目です。
![スライド1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2688241/8f231299-c076-09ef-5f62-913aaca12367.jpeg)

# MCVの準備
今回の目標物を実現するために最低限必要なファイルは以下です。

## モデル
**Hogeモデル**:メインとなるhogesテーブルのモデルです。
`id`カラム:データ作成と共に自動付与される値
`content`カラム:表示する内容
`genre_id`カラム:今回ポイントとなるカラムです。genreモデルと紐づけるためのカラムです。

**Genreモデル**:Hogeモデルの`genre_id`カラムと紐づけるためのモデルです。
`id`カラム:データ作成と共に自動付与される値。hogeモデルの`genre_id`カラムと紐づけます。
`name`カラム:genre名を設定します。

元記事を表示

htmlサニタイザーの検討

## htmlサニタイザーとは
サニタイズとは、主にHTMLやJavaScriptなどでWebサイトの表示や機能を記述するために用いられる特殊文字を、単純な文字として扱いたい場合に行われる。
なぜサニタイズをする必要があるかというと、Webサイトに設置された入力フォームなどから、悪意のあるスクリプトコードが入力されると、その文字列が解釈・実行されることで様々な被害に遭う恐れがあるためである。

## 想定している読者のニーズ
– ユーザーが自由に使えるオンラインエディタでhtml5の任意のタグを使えるようにしたい
– html5に対応したrubyのサニタイザーを比較したい

## 想定してないニーズ
– html4以前のサニタイズでいいや → [tidyっていうgemがサニタイズもフォーマットもしてくれるのでおすすめ](https://rubygems.org/gems/tidy/versions/1.1.2)
*ただし10年ほどメンテされていないので、そこは注意が必要

## TL;DR
個人としては、sanitizeかloofahの2択だと思っている。
見た感じ

元記事を表示

OTHERカテゴリの最新記事