Ruby関連のことを調べてみた2021年03月18日

Ruby関連のことを調べてみた2021年03月18日

単体テストコード

# 導入方法

① Gemfileのgroup :development, :testというグループの中にgem ‘rspec-rails’, ‘~> 4.0.0’と記入してbundle install
② % rails g rspec:installとターミナルに打ち込んでRSpecを使用できるようにする
③ .rspecに–format documentationを追記

テストコード
① specディレクトリにFactoryBotのファイルを生成
② テストする単体モデルのモデル.rbを作成
FactoryBotで指定
(例)
spec/factories/users.rb
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
FactoryBot.define do
factory :user do
name {Faker::Name.last_name}
email {Faker::Internet.free_email}
password = Faker::Internet.password(min_length: 6)
pas

元記事を表示

rubyのAPI問題

### 問題
任意の3つの数値の合計を出力するメソッドを作りましょう。ただし、同じ数が含まれている場合は合計にカウントされません。

### 模範回答の理解できたところを解説

“`lone.rb
def lone_sum(ary)
uniq_nums = []
ary.each do |num|
count = 0
ary.each do |i|
if num == i
count += 1
end
end
if count < 2 uniq_nums << num end end sum = 0 uniq_nums.each do |unique_num| sum += unique_num end puts sum end ``` 例えば```ary = [ 3, 2 ,3 ]```だったとして 一番親になっているeachで最初にnum = 3となって3を検証する。 次のeachで```num = 3```を対象に```ary = [ 3, 2

元記事を表示

部分テンプレート

# 部分テンプレートのやり方

例えば、tweetを作ってたとすると
下のようなコードを記述したとする

app/views/tweets/index.html.erb
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

<% @tweets.each do |tweet| %>
 < div class="content_post" style="background-image: url(<%= tweet.image %>);”>
< div class="more">
< span><%= image_tag 'arrow_top.png' %>
< ul class="more_list">
< li>
<%= link_to '詳細', tweet_path(tweet.id), method: :get %>
< /li>
<% if user_signed_i

元記事を表示

その他の機能

# コメントする時など・・

Userモデル以外で他のモデルidを取得したい

ルーティングファイル

resources :(コントローラーA) do
resources :(コントローラーB)
end

こう記述すれば、コントローラーBで
def index
@a = A.find(params[a_id])
end
みたいに紐付けられたモデルのid取得可能

元記事を表示

Web制作の一連の流れ 〜メインとなるモデル

# 手順 メインモデル作成

① rails g model (モデル名)
② マイグレーションファイルに必要なカラムを記述、Userモデルと紐づける必要があるなら、
t.references :user, foreign_key: true
みたいに記述
③ rails db:migrateでテーブル作成

## モデル
① バリデーション、アソシエーションの作成
② 写真等の投稿がある場合
  ⅰ) Gemfileにgem ‘mini_magick’  gem ‘image_processing’, ‘~> 1.2’を記述して
bundle install
ⅱ) rails active_storage:installでActive Storage導入してrails db:migrate
ⅲ) そのモデルにバリデーション、アソシエーションの設定
    has_one_attached :image
    validates :image, presence: true

## コントローラー、ルーティ

元記事を表示

Ruby on Railsで基本的なWebページを作る一連の流れ 〜devise編

# 手順

% cd ~/projects
% rails _6.0.0_ new (プロジェクト名) -d mysql   ⏪ 新規プロジェクト作成
% cd (プロジェクト名)                  ⏪ そのプロジェクトフォルダに移動
% rails db:create                 ⏪ データベース作成

※ この後、必要に応じてencoding: utf8mb4をencoding: utf8へ変更したり、README.mdを作成したり

————————————————————————–
## ユーザー管理機能

① Gemfileにdeviseを記述し、bundle install
② rails g devise:installでdeviseをインストール
③ rails g devise userでUserモデル作成   ※rails g model userではないため注意
④ マイグレーションファイルに必要なカラムを記述
 Eメール、パスワー

元記事を表示

【Rails】ログインしていないユーザーはログイン画面にリダイレクトさせる

# 目的
railsアプリ作成にあたり、ログインしていないユーザが直接URLを打ち込んで、各ページにアクセスしようとしてきたユーザに対し、ログインページにリダイレクトさせる。
ユーザー認証関係はdeviseを使用しています。

# 方法

上記のアクセス制限したいコントローラに対し、この1行を追加するだけです。

“`ruby
before_action :authenticate_user!
“`
これで各アクション実行される前にこのメソッドが実行され、ログインされているか判定されます。ログインしていなければ、ログインページにリダイレクトされるようになります。

# 参考にした記事

https://qiita.com/tobita0000/items/866de191635e6d74e392

元記事を表示

【Project Euler】 Problem4 【解いてみた】

# はじめに
【Project Euler】とは、プログラミングで解く数学の問題集です。

本投稿では初学者なりに、Problem1 を解くにあたっての考え方を解説しています。
ちなみに言語はRubyを用いています。

※本投稿は、Project Eulerのガイドラインに従い、解答例としてのコードは載せておりません。
 また、問題に関しては私が翻訳しています。ミスがあればご指摘ください。
  
【Project Euler】について知りたい方はこちらから↓

https://projecteuler.net/

# 問題(original ver.)
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99.

Find the largest palindrome made from the product of two 3-digit numbers.

# 問題(翻訳v

元記事を表示

【Rails6】herokuデプロイエラー時の対処

#開発環境

Rails 6.1.1
Ruby 2.7.2
git 2.30.0
heroku/7.50.0 darwin-x64 node-v12.16.2
mac 0S Big Sur 11.2.3
#エラーが発生

Railsで作成したアプリをHerokuの登録を行い、

“`
$ git push heroku HEAD
“`
コマンドを入力した際に以下のようなエラーが発生。

“`
! [remote rejected] HEAD -> master (pre-receive hook declined)
error: failed to push some refs to ‘https://git.heroku.com/*********.git’
“`

# bundleのバージョン変更
ターミナルのログを確認すると

“`
buildpack-detect-order
remote: —–> Ruby app detected
remote: —–> Installing bundler 2.2.11
remote: —–> Removin

元記事を表示

複数のdeviseにカラムを追加する

インストールしたdeviseにカラムを追加する。今回はUser modelとClient modelそれぞれにカラムを追加していく。

一. User modelにusername, birthdate, introを追加する

“`
rails g migration add_username_birthdate_intro_to_users username:string birthdate:date intro:text
“`

二. Client modelにcorpname, location, introを追加する

“`
rails g migration add_corpname_location_intro_to_clients corpname:string location:integer intro:text
“`

三. rails db:migrate

“`
rails db:migrate
“`

四. devise_parameter_sanitizerの設定(User側を例に)
app/controllers/users/registra

元記事を表示

Ruby on Rails 複数のdeviseを設定

ログイン等の機能で有名なdevise。
今回はuserとclientの2つを作る。
(deviseをインストールした後を想定)

一. それぞれのmodelを生成してmigrate

“`
rails g devise User
“`

“`
rails g devise Client
“`

“`
rails db:migrate
“`

二. Controllerの生成

“`
rails g devise:controllers users
“`

“`
rails g devise:controllers clients
“`

三. config/initializers/devise.rbの中の以下の記述を、コメントアウトを外してtrueに変更(viewの生成に必要な作業)

“`
config.scoped_views = true
“`

四. viewの生成

“`
rails g devise:views users
“`

“`
rails g devise:views clients
“`

五. routingの変更

“`

元記事を表示

Railsのturbolinksの弊害

`turbolinks`はページ読み込みをしない分ページ遷移を速くするツール。しかし、何かと弊害が生じる原因となっていた。ついに我慢の限界が、さてどうしようか。
ちなみに`turbolinks`は以下の物を指す。

“`erb:application.html.erb
↓の上にあるこれ
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
“`

####【ページ内リンク】
[0.環境](#0環境)
[1.背景](#1背景)
[2.flash.nowが作動しない・・・!?](#2flashnowが作動しない)
[3.turbolinksを残すか、それとも・・・](#3turbolinksを残すかそれとも)
[4.結論](#4結論)

#0.環境
・AWS
・Rails 5.2.4.5
・ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

#1.背景
この記事を書く前に、既に2つ(3つ?)弊害が起きていた

元記事を表示

【注意!】Rubyの全角スペースが原因のエラー

## 概要

Ruby課題を解いていたときに、`syntax error`が出て解決するのに数時間かかった。
結論から言うと、全角スペースが原因だった話。

##書いたコード

さて、どこが原因でしょうか?!
(エディタではなく、Qiitaで見ると分かりやすいですね。)

“`ruby:trip_main.rb
# 旅行プラン
plans = [
{ place: “沖縄”, price: 10000 },
{ place: “北海道”, price: 20000 },
{ place: “九州”, price: 15000 }
]

disp_plans(plans) #プランの表示
chosen_plan = choose_plan(plans) #プランの番号を選択
person_num = num_of_people(chosen_plan) #予約人数を入力
calculate_price(chosen_plan, person_num) #合計料金を表示
“`

## エラー文

“`ruby:error.rb
trip_main.rb:11: sy

元記事を表示

インスタンスメソッドとクラスメソッド

#はじめに
Railsチュートリアルを進める中で、少しわかりにくかったのでまとめてみることにしました。

#違い
**インスタンスメソッド**
レシーバがあるメソッド
(レシーバとは.の前に書かれたメソッドを呼び出すオブジェクト)

“`
user.name
[1.2.3].length
“`

**クラスメソッド**
レシーバがクラスであるメソッド

“`
User.new
“`
newがクラスメソッド
上記の例では、Userクラスのオブジェクトを作成

#クラスメソッドの定義方法
Railsチュートリアル9章でも出てきますが、selfを使って2種類の方法で定義することができます。

①メソッド名の前にselfを記述する

“`
class User < ApplicationRecord ・ ・ def self.new_token SecureRandom.urlsafe_base64 end ``` self=Userとなる ②class << self 複数のクラスメソッドを書く際は、こっちの方が便利。 ``` class User < Appl

元記事を表示

複数枚投稿する際に、投稿ボタンを押すとエラーが出た際の解決

プログラミング学習2ヶ月間。
Qiita初投稿。

写真複数枚投稿機能にて詰まったため、備忘録としてアウトプット。

今回詰まった内容としては複数枚投稿する際に、投稿ボタンを押すとエラーが出たといった内容。

抜粋コード記述

`new.html.erb`

“`
<%= f.file_field :images, name: 'post[images][]', id: "item-image" %>

<% @post.images.each do |image| %>
<%= image_tag image, class: 'item-box-img' %>
<% end %>
“`

`routes.rb`

“`
resources :posts do
resources :comments, only: :create
collection do
get ‘search’
end

元記事を表示

Rspec テストコード実行時のMysqlエラーについて

# はじめに
Ralisを使って実装中、テストコード実行時にMySQLエラーが発生しましたので、原因と解決策を記載しておきます。
同じ原因でつまづいてしまった方がいた時のお力になれればと思います。
なお、DB内の処理について、深い知見があるほどの技術力ではございません。それ故に、エラーの原因など、「厳密には違う」ということがあるかもしれません。
ご指摘いただければ修正いたしますので、どうか温かい目でご覧ください。

# 開発環境と事前状況
### バージョン
・`ruby 2.6.5`
・`rails 6.0.3.4`
・`mysql 14.14`
### 事前状況
・商品の購入を行うための、ItemBuyモデルを構築済み

“`ruby:app>models>item_buy.rb
class ItemBuy
include ActiveModel::Model
attr_accessor :postal_code, :from_id, :municipality, :house_number, :building_name, :tell, :user_id, :item_

元記事を表示

Twitter本文の文字数は気にしたことあっても他の文字数って気にしたこと無くない?

# はじめに

他の文字数とは、要はプロフィールの 名前・自己紹介・場所・ウェブサイト の4項目のことです。
ツイート本文とカウント方法が違ったのでそのカウント方法の検証を行う。
確証は無いため過信は禁物。

というわけで詳しい仕様に言及した Twitter 開発者ブログやドキュメント、他の検証記事、反証などがあればこの記事は無事、価値がなくなります。
情報求ム

本記事に登場するコードは特別な記載が無い限り ruby であるものとする。

# ツイート本文の文字数
twitter は多くの入力欄で文字数制限がかかっています。

[2017 年の仕様変更](https://blog.twitter.com/official/en_us/topics/product/2017/Giving-you-more-characters-to-express-yourself.html)以来、ツイート本文の本文の文字数制限は 280 文字となっています。

日本語中国語韓国語は「漢字使えるから文字数少なくても含意増やせるやろ」との理由で140文字制限
(正確には280文字制限で2文字カウントされ

元記事を表示

多対多の関係性にフォームオブジェクトなどが絡んで訳わからなくなった話

### アプリの仕様
– キャンプの記録をするアプリです
– ユーザーはキャンプのタイトルとキャンプスタイルという名のタグをつけて投稿します。
– キャンプタイトルとタグを同時に保存するためにフォームオブジェクトを使用しています。
– ユーザーは自分の持っているアイテムを登録できます。
– キャンプには複数のアイテムを持っていける。アイテムは何度でもキャンプに持っていけることからキャンプとアイテムは多対多の関係です。
– キャンプ記録を作成する際持って行ったアイテムの登録を実現させたい

### 発生したエラー

“`
undefined method `id’ for #
Request
Parameters:

{“authenticity_token”=>”6h75fWC/+zhPx96ZoRyir+kyevpfqLqawP75tlOKrGHOXHlfKtMlG0qvpQMLgrjc5Ld3x1bvduvrtllnJPZagw==”,
“camp_tags”=>{“title”=>”bboobb”, “style”=>

元記事を表示

railsで新規アプリを作成した時にmysqlにし忘れた時の対処

# railsで新規アプリを作る際, -d mysqlをつけ忘れた!
deviseの導入をしている時にencodingをutf8にしようと思い
database.ymlを開くと「ん?なんかいつもと全然違うな」と感じました。
utf8mb4(?)だっけの記述も全くなくなぜだーと思っていると
databaseの指定をしておらずデフォルトの設定になっておりました。(-d mysqlのしわすれ)

普段は下記の書き方でやってます

“`
% rails new -d mysql
“`

このままアプリを消して新しく開発を始めるのはスマートじゃないので
ここからmysqlに指定しなおしていきましょう!
(mysqlを使いたいのはただ私がmysqlにしか慣れていないため)

## 手順1 gemfileの修正
まずgemfile内にsqlliteの記述があるのでそれを削除しました
削除した部分に新しくmysql2の記述を入れておきます

“`
#gem ‘sqlite3’, ‘~> 1.3.6’
gem ‘mysql2’
“`

そしてbundle installでmysql2のgemを

元記事を表示

Active Storageを用いた画像投稿機能

#Active Storageとは

Active Storageとは画像投稿機能を実装できるGemです。
写真を投稿して一覧表示するアプリ作成にActive Storageを使ったので、実装方法をまとめました。

またその他にも画像加工のために色々と導入が必要になります。

・ImageMagick・・・画像の作成やサイズ変更、保存形式の変更ができるソフトウェア
 ※gemでは無いのでHomebrewからインストールします
・Minimagick・・・ImageMagickの機能をRubyで扱えるようにしてくれるgemです
・ImageProcessing・・・画像サイズを調整するためのgemです

#Active Storageの導入

・brew install imagemagickを行い、imagemagickをインストール

・gemを導入してbundle installを行う

“`ruby:qiita.rb
gem ‘mini_magick’
gem ‘image_processing’, ‘~> 1.2’
“`

・rails active_storage:in

元記事を表示

OTHERカテゴリの最新記事