Ruby関連のことを調べてみた2020年11月15日

Ruby関連のことを調べてみた2020年11月15日
目次

【Ruby on Rails】NoMethodError: undefined method `t’ for #エラーの対処

#エラー画面![スクリーンショット 2020-11-15 7.34.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722354/580f5a17-647e-3fbe-38c7-99e9e4701136.png)

#該当のソースコード
“`ruby
class AddDeviseToUsers < ActiveRecord::Migration[6.0] def change create_table :users do |t| t.string :name, null: false t.text :profile end end t.string :email, null: false, default: '' t.string :encrypted_password, null: false, default: '' end ``` #原因 メソッドtの定義はそのcreate_tableのdo

元記事を表示

ボーボボで学ぶスレッド

# 趣旨


ツイッターで見かけたボーボボのレシートがマルチスレッドの勉強になるかなー、と思ったので投稿します。

# なぜ Ruby か?
いま Python を勉強しているの

元記事を表示

Railsにて検索機能を追加する。

#概要
アプリケーション内でデータを検索できる機能があると、ユーザーがデータを探す際便利である。検索機能はSNS等でもよくある機能なので、実際に検索機能を実装してみる。
userというテーブルがあるとした場合、userを検索する機能を実装する。

#1.ルーティングの設定
userを扱うUserModel、UsersControllerは作成されていることを前提とします。

“`ruby:/config/routes.rb
# 省略
resources :users do
get “search”, on: :collection
end
“`

searchアクションはリソースの集合を表すためon: :collectionを追加します。

#2.モデルにクラスメソッドsearchを追加

“`ruby:/app/model/user.rb
class User < ApplicationRecord class << self def search(query) rel = order("id") if query.prese

元記事を表示

Hashのvalue側がarrayで全部取り出したいときの速度比較

# TL;DR
value側が

– 深さ1
スピードは `each_value` が最速
メソッドチェーン続けたい感じだったら `flat_map` も考えられる

– 深さ2以上で全部flatにしたいとき
`values.flatten` が早いけど `each_value + flatten` とあまり速さ変わらないので好み。

実行環境 Ruby 2.7.1

# パターン
“`ruby
sample = { a: [1, 2, 3], b: [2, 3, 4], c: [3, 4, 5] }
“`

## 1. each
“`ruby
ary = []
sample.each { |_k, v| ary.concat(v) }
ary
# => [1, 2, 3, 2, 3, 4, 3, 4, 5]
“`

## 2. each_value
“`ruby
ary = []
sample.each_value { |v| ary.push(*v) } # 上の例もconcatじゃなくてpushでも大丈夫
ary
# => [1, 2, 3, 2, 3

元記事を表示

【業務未経験・独学】自社開発企業様から内定をもらうまでのお話

#筆者のプロフィール
プログラミング歴三年弱
独学

#どのくらい応募したか
エージェントの経由での応募も含めるとだいたい70−80社ほど。そのうち書類通過は15社くらい。
内定は3社いただきました。(1社は自社開発ではないです。)
選考途中のものは全てお断りしたのでもしかしたらもう1−2社くらい内定いただけかもしれないです。
就活期間 2020年10月初旬〜2020年11月中旬の1ヶ月ちょい

#概要
社内で管理しているエクセルファイルとかを勝手にVBAで自動化するうちにプログラミングが楽しくなり、WEB系エンジニアにジョブチェンジ

#具体的な学習方法
基本ほぼ全てアウトプットをベースに学習しました(最近はインプットもするように心がけています。)
なので最初に必ずやりたいことがあってそれを実現する方法を調べるという手順になります。

※途中から学習方法というよりは私がプログラミングができるようになるまでの過程になってます。なんか初学者の方のヒントになればとは思います。

★具体例
エクセルで毎回毎回同じフィルターかけるのめんどくさいからボタンを何個か設置してよく使うフィルターはボタ

元記事を表示

【rails 初心者向け】複数Deviseモデルのログイン後の遷移先指定

#管理者(admin)、顧客側(customer/user等)などを作成した際に、それぞれのログイン後のリダイレクト先を指定したい
###前提
・devise使用モデルとしてadminモデルとcustomerモデルがある(モデル名は置き換えて考えてください)
###実装

“`ruby:application_controller.erb
class ApplicationController < ActionController::Base def after_sign_in_path_for(resource) case resource when Admin admin_top_path #pathは設定したい遷移先へのpathを指定してください when Customer root_path #ここもpathはご自由に変更してください end end end ``` 記述してみると簡単で、すぐ覚えられそうですね。 記述内容について、少し解説してみます! ・```

元記事を表示

安全な数字(ruby編)

#[問題]安全な数字(ruby編)
#問題
4 桁のパスワードを考える上で法則性のある数字を避けようと考えています。
4 桁の数字で構成されたパスワードの文字列 s が入力されるので同じ数字が 2 つ以上存在すれば「NG」、そうでない場合は「OK」と出力してください。
#入力される値
入力は以下のフォーマットで与えられます。

s

・1 行目に 4 桁の数字で構成されたパスワードの文字列 s が与えられます。
・入力は合計で 1 行となり、入力値最終行の末尾に改行が 1 つ入ります。
#期待する出力
4 桁の数字で構成されたパスワードの文字列 s が入力されるので同じ数字が 2 つ以上存在すれば「NG」、そうでない場合は「OK」と出力してください。
#入力例1
2020
#出力例1
NG
#入力例2
1234
#出力例2
OK
#私の答え
“`java:
a = gets.chomp.chars
if (a.count – a.uniq.count) > 0
puts “NG”
else
puts “OK”
end
“`
###1行目のcharsメソッドで例1で例

元記事を表示

Ralisのポートフォリオでcollection_check_boxesメソッドを使ったので復習

#はじめに
user.rb

“`
has_many :habits, dependent: :destroy
“`
habit.rb

“`
belongs_to :user
“`
userモデルがhabitモデルを複数持っている関係性
habitモデルは、taskというstring型のカラムと、completeというinteger型のカラムを持っている

#やりたい事
チェックしたhabitモデルのみ、completeカラムに+1したい
これを1つのフォームで複数一気に出来るのがcollection_check_boxes
書き方はこんな感じ

“`
<%= form_with(model: @user,url: complete_user_path, local: true) do |f|%>

<%= @user.name %>

習慣

<%= f.collection_check_boxes :habit_ids, @user.habits,:id,

元記事を表示

Rails 6でjQueryとBootstrapを使えるようにする(Rails 6)

Ruby on Railsでアプリケーションを作る際に,jQueryとBootstrapを使えるようにしたかったので手順をメモ。(Webpackerを使用。)

__1.yarnでjQuery、Bootstrap、popper.js(Bootstrapが使う)を導入。__

アプリケーションのディレクトリ配下で以下を実行。

“`
yarn add jquery bootstrap popper.js
“`

__2.webpackの設定__
app/config/webpackのenvironment.jsの記述を追加する。
(これによりimportやrequireなしで$やBootstrapのJavascriptが使えるようにする。)

“`javascript:environment.js
const { environment } = require(‘@rails/webpacker’);

//ここから
const webpack = require(‘webpack’);

environment.plugins.prepend(
‘Provide’,
n

元記事を表示

jQueryでタブをマウスオーバー した際に表示画面を切り替える

# はじめに
今回はjQueryを使って、tabをマウスオーバーした際にページリロードを行わずに表示を切り替える方法を記述していきます。

# 完成イメージ
![mypageTabChange.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683220/e9fe5872-fa3a-97cc-d0d8-8c432744708c.gif)

# 環境
MacOS 10.15.7
ruby 2.6.5
Ruby on Rails 6.0.0
jquery 3.4.1

# 前提条件
– jQueryが導入済みであること。

# それでは作業していきます!

## ①show.html.erbとcssを作成する。

まずはhtmlから作成します。今回はshow.html.erbというファイルに記述します。

“`erb:show.html.erb

<%# tab部分 %>

元記事を表示

HerokuをリセットしようとしたらActiveRecord::StatementInvalid: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near が出た場合の対処法

#リセットしようとした経緯
本番環境ではあるものの、たくさんのユーザーやデータを作りすぎ、見た目が繁雑になってきたため、Herokuのデータベースをリセットして初めからやり直したいと考えた。

#背景
リセットをするために以下を実行した。

“`terminal
% 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:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1
“`

DISABLE_DATABASE_ENVIRONMENT_CHECK=1を付けて再度実行

“`terminal
% h

元記事を表示

RailsのAPIモードをCookie(session)認証に対応させる

onecareer内のアプリ(Vue.js + RailsのAPIモード)の認証方式をtoken認証からsession(cookie)に変更した時の変更点をまとめる

## これを始めた理由

**既存のWebアプリからシームレスにログインさせる要件が発生したため**

– 普通のwebアプリで実装された画面でログインしたユーザーを、SPAで作られた画面にシームレスにログインさせるには
– OAuthサーバーを作るか
– Cookie(Session)の認証を利用する必要がある。

今回は納期優先でsession認証に変更

## Cookie認証に必要だったもの

### サーバー側
#### config/application.rb

“`ruby
# Only loads a smaller set of middleware suitable for API only apps.
# Middleware like session, flash, cookies can be added back manually.
# Skip v

元記事を表示

テンプレート: Docker コンテナで Ruby / Rails の開発環境を構築する (Mac版)

手軽に Ruby / Rails の開発環境を構築したいなら Docker が最適です。
ここでは、ホストOSとしてMac OSを使用しています。
[(Ubuntuホストの場合はこちらを参照してください)](http://qiita.com/TYD/items/d35090fd7205006b3c88)

Dockerコンテナでは、ベースOSをUbuntu 20.04とし、Rails アプリケーションを実行するために必要なライブラリやRuby本体をインストールしていきます。
Railsアプリケーション本体はホストOS上のローカルディレクトリから参照できるようにします。
これはRailsアプリケーションの実行環境をDockerコンテナが担い、エディタによるRailsアプリケーションの編集やソースコード管理をホストOS上で実現するためのものです。

以下のようなメリットがあります。

1.ホストOS上にRubyやRailsを直接インストールする必要がない
2.必要に応じて異なるバージョンのRubyやRailsを別々のコンテナで実行させることも可能
3.RailsソースコードはホストOS上の

元記事を表示

rails6 form_with(ヘルパー)のラジオボタンにCSSを装飾する方法

目的:rails6にてform_withでラジオボタンを実装、それに対してCSSで装飾を行います。

苦戦したこと:ヘルパーを使っていることにより、ラジオボタンの内部構造が見えなくなってしまった。

①他のオプションと違いラジオボタンはclassをセレクタにしてもCSSを反映する事ができない。
②label forが設定されていない事により、選択作業が反映できないバグが発生。

以下、内容を記載。

①ラジオボタンはclassセレクタではCSSが反映されない。

HTML
![スクリーンショット 2020-11-14 19.30.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864534/4a6c068a-bed0-ea5c-5b1f-f3b5a44636fd.png)

CSS
.second{
font-size: 14px;
font-weight: bold;
display: block; /* ブロックレベル要素化する */
float: l

元記事を表示

Rails Webサーバーとアプリケーションサーバー

#はじめに
普段何気なく使っていたコマンド「rails s」。このコマンドにより、何がどう動いていたのか改めて認識したので、書き記します。

**補足**
rails sはローカルサーバーを立ち上げるコマンドです。

#目次
1.Webサーバーとアプリケーションサーバー
2.ローカル環境
3.本番環境

#1.Webサーバーとアプリケーションサーバー
処理の負荷を分散する(高速処理)ため、サーバーは機能ごとに分業されている。

**Webサーバー**
クライアントサイドからのリクエストを全て受ける。リクエストの内容が静的(HTMLやCSS)な場合、Webサーバーがブラウザ(クライアント)へレスポンスを返す。リクエストの内容が動的(データベースから情報を検索する等)な場合、アプリケーションサーバーへリクエストを渡す。

**アプリケーションサーバー**
Webサーバーから渡されたリクエストを受け取り、対応するコントローラーのアクションを実行する。その後、処理結果をWebサーバーに返す。

#2.ローカル環境
ターミナルでrails s と入力するとサーバーが立ち上がる。そのときターミナル

元記事を表示

テンプレート: Docker コンテナで Ruby / Rails の開発環境を構築する(Ubuntu版)

手軽に Ruby / Rails の開発環境を構築したいなら Docker が最適です。
ここでは、ホストOSとしてUbuntuを使用しています。
[(Macホストの場合はこちらを参照してください)](http://qiita.com/TYD/items/f58b6798aaf25186d2a9)

Dockerコンテナでは、ベースOSをUbuntu 20.04とし、Rails アプリケーションを実行するために必要なライブラリやRuby本体をインストールしていきます。
Railsアプリケーション本体はホストOS上のローカルディレクトリから参照できるようにします。
これはRailsアプリケーションの実行環境をDockerコンテナが担い、エディタによるRailsアプリケーションの編集やソースコード管理をホストOS上で実現するためのものです。

以下のようなメリットがあります。

1.ホストOS上にRubyやRailsを直接インストールする必要がない
2.必要に応じて異なるバージョンのRubyやRailsを別々のコンテナで実行させることも可能
3.RailsソースコードはホストOS上の好みの

元記事を表示

【初投稿】売れた商品に対して、SoldOutの文字を出力する

条件式でexists?メソッドを使用し、指定したテーブル内のカラム名(item_id)と売れた商品(item.id)が一致したら商品にSoldOutの文字を出力するコードを書きました。

“`ruby:qiita.rb
<% if Order.exists?(item_id: [item.id]) %>

Sold Out!!

<% end %>
“`

私のコードの書き方で当たり前なことかもしれませんが、こういう動作をさせたいといいう目的がある場合、今回の動作であれば売れた商品にSoldOutを表示させたいという目的がありました。

その目的に対して、exists?メソッドはいきなり見つけたわけではなく、まず商品を購入してitem_idを商品情報と一緒にorderテーブル保存しているのでitem_idがorderテーブルにあることに気が付きます。

商品のid、item_idを見境なしに判別してしまうのは違うので、orderテーブルにitem_idが存在した場合トップページに存

元記事を表示

Railsで非同期通信で実装する投稿機能

##はじめに
今回は非同期通信による投稿機能を実装していきます。
今回は非同期処理を行う事にフォーカスを当てるためすでに画面遷移ありの投稿機能が実装されている状態からのスタートとなります。
jsの理解のため、素のjsでの記述となります。
また初学者のため間違え等ありましたらご指摘頂けると幸いです。

##手順1 remote: tureを追加
入力フォームにremote: tureを追記しましょう!

“`
<%# タスク入力フォーム %>

<%= form_with model: @category, id: 'new_tasks', class: 'new_tasks' do |f| %>

<%= f.text_field :task %>
<%= f.submit "+" %>

<% end %>

元記事を表示

whereを用いたparamsの例

こちら完全に備忘録です。。。
見苦しいですが一度投稿させてください。
後で修正いたします。

#アソシエーション

“`ruby:user.rb
has_many :hoges
has_many :hoge_events
“`

“`ruby:hoge.rb
belongs_to :user
has_many :hoge_events
“`

“`ruby:hoge_events.rb
belongs_to :user
belongs_to :hoge
“`

#ビュー
画面(ビュー)には以下の様なリンクがある。

①hoge_event
②hoge_event
③hoge_event
④hoge_event

例えば、現在操作中のユーザーが③のイベント詳細をクリックすると、③に関する情報全てが表示される様に。
①のイベント詳細をクリックすれば、①に関する情報全てが表示される様にしたい。(paramsもしっかり渡されていることとする)

#コントローラー

“`ruby
def show
@hoge_events = current_user.hoge_eve

元記事を表示

【Rails】Bootstrapのtext-lightをlink_toメソッドに継承できないのは、メソッドに引数としてクラスを書いていないのが原因らしい

##はじめに
BootstrapをRails環境に導入し、きれいにしていくぞ~って思ったらいきなり躓いたので共有します。

##事象
どうしてもlink_toメソッドの要素に継承されない

###HTMLで記載したときはテキストに白色が適用されている
![image (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/499617/6c8607d2-5842-1699-7f3a-2b4005f04482.png)

“`bash:index.html

“`

###なぜかlink_toに置き換えると継承さ

元記事を表示

OTHERカテゴリの最新記事