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

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

Railsでupdate_allとストロングパラメーターを併用した際のエラー対処

# 状況
railsの`update_all`メソッドとストロングパラメーターを併用して、SQLの発行回数を減らしてデータを一括更新したい。

# パラメーター
“`
Parameters: {“update_ids”=>[“1”, “2”, “3”], “group_id”=>”2”}
“`
update_idsで取得した複数のアイテムの属するグループIDを一括で変更したい。

# 該当コード
“`Ruby:items_controller.rb
def update
ids = params[:update_ids]
Items.where(id: ids).update_all(update_params)
end

private

def update_params
params.permit(:group_id)
end
“`

もちろん今回のような単純なケースだとストロングパラメーターを使用する必要はなく、

“`Ruby:items_controller.rb
def update
ids = params[:update_ids]
Ite

元記事を表示

未経験転職中に出題されたコーディングテスト

転職活動中(未経験)にコーディングテストがあり、解答した答えを備忘録として残しました
実力不足で色々試行錯誤して出した答えのため、修正・解説いただけると嬉しいです
この他にも何問かあったので、追って記事にする予定です
# 問題1.回文部分の文字列を出力
PalindromString(str)でstrには文字列が入ります。
この文字列内で部分的に最長となる回文文字列を取得するメソッドを作るという問題です。
例 str=”abracecars”の場合、racecarを返す必要があります。
strの入力は小文字英字のみで、3文字以上の回文文字列がない場合はnoneを返すようにしてください。

## 自分の回答
1.変数wordに文字列内で連続した文字のすべての組み合わせを取り出す
2.reverseメソッドを用いてword == word.reverseを満たしかつ3文字以上のwordを配列に代入する
3.配列内で最長となるwordを出力する
といった処理を記述したつもりです
以下が全体のコードです

“`ruby
def PalindromString(str)

# code g

元記事を表示

アプリ開発実践入門6 Modelとデータベース SQL編

今日の教科書

#データベースの設定
##database.yml
configの中のdatabase.ymlファイルがデータベースの設定ファイルです。
YAMLファイルはデータをテキストで表すフォーマットでインデントでデータを構造的に記述している。

“`
default: &default
設定
development:
設定
test:
設定
production:
設定
“`

`default`:全てに共通する設定
`development`:開発時の設定
`test`:テスト用の設定
`production`:リリース時の設定

###主な設定の項目

`adapter`:データベースアクセスに使われるプログラムの一種。それぞれのデータベースごとにある。名前を使いたいデータベース用のものに変更して使う。

`pool`:データベースにアクセスするためのもので5とすると最大5ユーザーが同時にデータベースにアクセスできる。

`timeout`:データベースの結果を受け取るまでの最大の待ち時間。サーバ型だと、サーバーに問い合わせてから結果を受け取る。その際どれくらい待たされ

元記事を表示

RailsにTailwindCSSを導入

# はじめに
今回はRailsアプリにTailwindを導入するための手順を書いていきます。
[こちらの記事](https://davidteren.medium.com/tailwindcss-2-0-with-rails-6-1-postcss-8-0-9645e235892d)の手順に沿って進めていきます。

# バージョン
紹介した記事の中ではそれぞれ

“`
ruby 3.0.0
rails 6.1
“`

以上のバージョンで構成されています。が
私の環境は

“`
ruby 2.6.6
rails 6.1.3
“`

といった感じで記事の通りのバージョンではないのですが、この環境でも概ね記事の通りにすすめることが出来ました。(エラーはあったものの)
ですので、少なくとも私の環境のバージョン以上であれば問題なく導入できるかと思います。

## 導入手順
記事の中では新しいアプリケーションを作成するところから触れられていますが、
私は既存のアプリケーションに導入しましたので最初の方の手順は少し省きます。

元記事を表示

【Rails】 レビュー投稿は1度までに制限する方法

はじめに

先日口コミサイトのレビュー機能を実装していた際に、一人のユーザーが何度もレビューの投稿を出来ては困る、どうしたら良いのだろうかと悩んだことがありましたので、自身の備忘録として記事に残しておきたいと思います。

テーブル同士の関係性

※今回の記事に必要な最低限のテーブルのみ掲載しております。
スクリーンショット 2021-02-22 22.42.58.png

モデル

reviewモデルには、評価の値の空を禁止すること、1以上5未満(5段回評価のため)で評価しなければならない、というバリデーションを設定しております。

“`review.rb
class Review < ApplicationRecord belongs_to :member be

元記事を表示

[Ruby on Rails] WebpackerでjQueryを管理する方法

今回は、**jQuery**のインストール方法について備忘録を書いていきます。

**jQuery**は、JavaScriptを簡易的に記述できるライブラリで、今でも根強い人気を持つものです。
ライブラリを導入するためには、事前の設定がいくつか必要です。

まずはコマンドを実行しjQueryをインストールしていきます。

#% yarn add jquery

jQueryの導入には、jquery-railsというGemを利用することもありますが、今回のように**Webpacker**で管理する際は、Node.jsのパッケージを利用します。

 

yarnコマンドを実行した後は
**webpackの管理下に追加する記述**を追加で書いていきます。

“`config/webpack/environment.js
const { environment } = require(‘@rails/webpacker’)

const webpack = require(‘webpack’)
environment.plugins.prepend(‘Provide’,
new we

元記事を表示

ruby silver受験前に個人的な注意ポイントまとめ

#概要
今週末がruby silverの試験なので
試験前にさっと見直せる様、ここ数日の勉強で理解に時間がかかったポイントをまとめておきます。
これから受験する方にとっても、参考になれば幸いです。

#string
###to_h to_a
stringクラスにto_h,to_aメソッドはないので注意!

“`ruby:to_h_to_a.rb
hoge = “a”.to_h
puts hoge
# => NoMethodError

hoge = “a”.to_a
puts hoge.class
# => NoMethodError
“`

###to_i
to_iメソッドは、整数とみなされない文字が含まれていれば、その直前までを数値に変換する
変換対象が空文字列であれば 0 を返す

“`ruby:to_i.rb
p “123abc”.to_i # => 123
p “123-4”.to_i # => 123
p “-123あいう”.to_i # => -123
p “1a2b3c”.to_i # => 1
p “”.to_i # => 0
p “abc123”.to_i #

元記事を表示

Rails6にBootstrapを導入してトップページを作成する

Rails6でアプリケーションにBootstrapを導入した際の手順をまとめてみました。
###### 完成形
![cook.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1140333/f8c0aa10-2606-0b9d-8876-888500ea432f.jpeg)
Bootstrapの導入までは以下をコピペ

##Bootstrapの導入

##### jQuery、Bootstrap、popper.jsの導入
“`:ターミナル
yarn add jquery bootstrap popper.js
“`
##### webpackの設定
“`javascript:config/webpack/environment.js
const { environment } = require(‘@rails/webpacker’)

//ここから
const webpack = require(‘webpack’)
environment.plugins.append(
‘Provide’,

元記事を表示

railsでpostgresqlを使うと2度目の投稿データ編集時に、1回目の編集データが下段にずれる

先日ポートフォリオを作成時に編集データが下段にずれてしまい、困ったため備忘録として投稿します。
これだけではなんのことかわからないと思うので内容をご確認ください!

#アソシエーション
![スクリーンショット 2021-02-22 20.37.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1036177/886b0af1-c6c0-87c9-7095-2711e236198e.png)
#コントローラー
“`cooks_controller.rb
def new
@cook = Cook.new
8.times { @cook.materials.build }
end
“`
このような形で新規投稿時に、食材と分量を最大8種類入れることができるようにしています。

#ビュー
“`_cook_form.html.slim
div.cook-post-container
div.col-12
= form_with model: cook, loca

元記事を表示

[memo]deviseの導入方法

##deviseの導入手順

“`
# Gemfile
% gem ‘devise’

#ターミナル
% bundle install

# deviseの設定ファイルを作成
% rails g devise:install

# deviseコマンドでUserモデルを作成
% rails g devise user

# テーブルの設計を確認しマイグレーションファイルへ追記
% rails db:migrate
“`

deviseでログイン機能を実装すると、ログイン/サインアップ画面が自動的に生成されますがビューファイルとしては生成されません。
これは、deviseのGem内に存在するビューファイルを読み込んでいるためです。

deviseのビューファイルに変更を加えるためには、deviseのコマンドを利用して、ビューファイルを生成する必要があります。

“`
# deviseのコマンドで、devise用のビューファイルを生成
# deviseに用意されたビューファイルをコピーし、app/viewsの配下に配置してくれるコマンド
% rails g devise:views

元記事を表示

[memo]ログインしているかどうかの判定

##user_signed_in?メソッド
ログインしているかどうかの判定を行うdeviseのメソッド

例:viewでログインしているときとそうでないときで表示を分ける場合に使う

“`:app/views/layouts/application.html.erb
<% if user_signed_in? %>
 

  <%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
  <%= link_to "投稿する", new_tweet_path, class: "post" %>
 

<% else %>
 

  <%= link_to "ログイン", new_user_session_path, class: "post" %>
  <%= link_to "新規登録", new_user_registration_path, class: "post" %>
 

<% end

元記事を表示

[Ruby][macOS] 任意の文字列をクリップボードにコピーする

## 方法

[IO.popen](https://docs.ruby-lang.org/ja/latest/method/IO/s/popen.html) を使用する。

“`rb
def pbcopy(str)
IO.popen(‘pbcopy’, ‘w’) { _1.print(str.to_s) }
end
“`

![2021-02-22 17-47-26.2021-02-22 17_48_21.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/a1d09ad4-9cc5-33fc-20e7-27d006c4c342.gif)

元記事を表示

【ruby】CSVファイル読み込み時に1列目のデータが読み込めない時の対応

初期投入用のDB登録処理を作成した際、CSVファイルを読み込んでデータを登録するようにしたのですが、1列目に登録していたデータを読み込めない現象が発生しました。
対応方法を調査した時によく見かけたBOMの有無の確認方法が、CSVだとうまく確認できないようなので、備忘として残します。

# 環境
macOS Big Sur 11.0.1
ruby 2.7.2

# 現象
以下のようなCSVファイルを、

“`csv:food.csv
id,category,name
1,北京料理,北京ダック
2,北京料理,杏仁豆腐
3,北京料理,炸醤麺
“`

以下の処理で読み込ませようとしたとき、1列目である`id`列が読み込めず、nilとなってしまう。
※データ取得時にヘッダ名を指定したときのみ。indexで指定すると問題なく登録できる。

“`rb:
require ‘csv’

CSV.foreach(“food.csv”, encoding: ‘UTF-8’, headers: :first_row) do |row|
Food.seed(:id) do |s|
s.id =

元記事を表示

学び直し Rubyがミニツク Part8

今日の教科書
[継承](http://www.minituku.net/courses/566428009/contents/43567039.html)

#継承
すでに定義されているクラスから機能を引き継いで新しいクラスを作ること。
作るときにスーパークラス(親クラス)となるクラスを指定すると継承できる。

“`
class サブクラス < スーパークラス 本体 end ``` 継承で新しく作られたクラスをサブクラス、継承元のクラスをスーパークラスと呼ぶ。 スーパーにできるのは一つだけ! ``` class Foo def foo puts("foo") end end class Bar < Foo def bar puts("bar") end end bar = Bar.new bar.foo #=> foo
bar.bar #=> bar
“`

継承によってサブクラスができること
– スーパーの機能を全て使用でき、新しい機能を追加
– スーパーの機能を上書きして、同じ名前のメソッドを作れる
– スーパーの機能を呼

元記事を表示

Rubyで時系列予測〜prophet〜

自分で使うにあたって、頭の整理も兼ねて記事にしました。

## rubyで時系列予測がしたい!
– 全部rubyでやりたい
– railsで動かしてるシステムの中で予測値を出したい
– pythonやRなどでいいライブラリはいっぱいあるが、railsとのつなぎこみが面倒臭い
– スプレッドシートのTREND関数などもあるけど、やっぱりrailsとのつなぎこみが面倒臭い
– 全部rubyでやりたい

## prophetを使おう
prophet-rbというgemを使います。
https://github.com/ankane/prophet

元はfacebook/prophet(https://github.com/facebook/prophet )。これを移植してきたもの。

– 複数の季節性
– 線形/非線形成長
– 祝日など特別な日のハンドリング
– 欠損値処理
などをいい感じにやってくれる。

## インストール
Gemfileに以下の行を追記。

“`
gem ‘prophet-rb’
“`

## まずは試しに
{ 時系列: 実績値 }のハッシュを用意します。

元記事を表示

【Rails】定数を定義したらとりあえず freeze しておく

## はじめに

~~~ruby:
# 定数を定義した例
ARASHI_MEMBERS = [‘大野’, ‘松本’, ‘二宮’, ‘桜井’, ‘相葉’].freeze
~~~

上記のように Rails で定義した定数は基本的に freeze しておくのがベストです。

不用意に変更されることを防げます。

freeze しておくと、もし `ARASHI_MEMBERS` に破壊的な変更が行われようとした時に FrozenError を起こしてくれます。

~~~irb:
irb(main):001:0> ARASHI_MEMBERS << '木村' Traceback (most recent call last): 4: from /Users/dan/.rbenv/versions/2.7.1/bin/irb:23:in `


3: from /Users/dan/.rbenv/versions/2.7.1/bin/irb:23:in `load’
2: from /Users/dan/.rbenv/versions/2

元記事を表示

rubyでゲームを作りたい

初心者です。Rubyでゲームを作りたかったのですが序盤ではまりまくったので、メモ書き。

ゲーム作りどころかRubyも始めたばかりなので、取り合えず、Googleで「Ruby ゲーム作る」とかで検索をかけ、https://www.sejuku.net/blog/11266
のサイトに行く。

サイトの順番通りにRuby/SDLをやってみようと思い、Ruby/SDLをダウンロードしてみようと、
https://www.kmc.gr.jp/~ohai/rubysdl_download.html
へ飛ぶも、rubyforge.orgのサイトは消滅しているらしく、最新版をダウンロードすることができない。

で、細かいことは忘れたけど、確か
https://rubygems.org/gems/rubysdl
のサイトでRubysdlの2.2.0をダウンロードして、Rubyの処理系もダウンロードして、
ruby install_rubysdl.rb
を実行するとエラーが出た。

色々調べて、何もわからん、と思いながら
http://blawat2015.no-ip.com/~mieki256/di

元記事を表示

アプリ開発実践入門5 Controllerとview メッセージボード

今日の教科書

#メッセージボードを作る
名前・メアド・メッセージを記入し送信するフォームの下に一覧でメッセージを表示し時間経過で消去するプログラム。

##コントローラの作成

`rails generate controller コントローラ名 アクション名`:コントローラとアクションを作成するジェネレーションコマンド。アクションが作成される際は、アクションメソッド、ビューテンプレート、ルート設定がデフォルトで用意される。

##ビューHTMLテンプレートの編集

フォームの表示と投稿したメッセージのテーブル表示の二つを作成する。
フォームについては割愛。

###ハッシュをテーブルに展開する

“`
<% @msg_data.each do |key,obj| %>

<%= obj['msg'] %>


<%= Time.at(key.to_i) %>

<% end %>
“`

インスタンス変数の中身を取り出して、テーブルのセルとして記述する。v

元記事を表示

Rails Heroku で運用しているサイトで SendGrid を2段階認証にし API KEY を利用して SMTP 方式で Mail を送信する

Rails と Heroku を利用して Webサイトを運用していましたが SendGrid でセキュリティの観点から user_name と Password を利用した認証ではメールを送信することが不可になったようです。そこで、メールを送信できるように

– SendGrid の2段階認証を有効化
– API key を利用してSendGrid にアクセス

上記、設定にしなおしました。

## 手順
1. Heroku のダッシュボードから SendGrid にアクセスする。
2. SendGrid の設定画面から2段階認証を有効する。
3. SendGrid の設定画面から API key を作成し保存する。
4. Rails `config/environments/production.rb`で ActionMailer の設定を編集する。
5. Heroku の環境変数に取得した API key を追加する。
6. `git push heroku master`する。

### 環境
– Rails
– Heroku
– SendGrid(※ Heroku の add-

元記事を表示

【Rails】carrierwaveで実装した画像アップロード機能にプレビューやアイコンを加えてお洒落に改造する

## 概要

![スクリーンショット 2021-02-21 23.40.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/30119467-e965-87f0-b507-63d1a4ef6ddc.png)

Ruby on Railsで作ったWebアプリに画像アップロード機能を実装したい場合、特に有力な選択肢として挙がる「[carrierwave](https://github.com/carrierwaveuploader/carrierwave)」ですが、よくあるチュートリアル通りにやっただけでは↑みたいな感じでやや素っ気ないデザインになってしまいがち…。

そこで今回は、プレビューを付けたり綺麗なアイコンを追加したりして少しだけお洒落に改造してみます。

## 完成イメージ

![マイ-ムービー.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/ef1bcbd1-1105-51fb-b

元記事を表示

OTHERカテゴリの最新記事