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

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

ドリルTX45 

class ArticlesController < ApplicationController def show article = Article.find(params[:id]) end end これでは表示されない、、、 Railsではコントローラで設定された「インスタンス変数」がビューに渡される仕組みになっている。 コードのarticleは通常のローカル変数であるためビューで使うことができない。そのため、articleを@articleに変更すればよい。 4行目のArticle.find(params[:id])という記述のうち、params[:id]には詳細表示されたいレコードのidが格納されます。なぜそのような動作になるのか、「rails routes」という言葉を使って説明してください。 rails routesを使ってアプリケーションのルーティングを確認すると、通常showアクションには以下のような設定がされている。 1 Prefix Verb URI Pattern

元記事を表示

rails sができない時の対処方

# rails sを叩くとエラー出力

spring stopを試して解決できず少し詰まったので備忘録として残します。

“`
/Users/arakitakuro/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:90: warning: already initialized constant FileUtils::VERSION
/Users/arakitakuro/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/fileutils-1.4.1/lib/fileutils.rb:105: warning: previous definition of VERSION was here
/Users/arakitakuro/.rbenv/versions/2.5.1/lib/ruby/2.5.0/fileutils.rb:1188: warning: already initialized constant FileUtils::Entry_::S_IF_DOOR
/Users/ara

元記事を表示

【Ruby on Rails】フォームオブジェクトを使って検索キーワードをcontrollerに送る

## 想定対象者

– Ruby on Railsで検索フォームを独自で作りたい
– ransackを使いたくない
– Google Books APIを使ったポートフォリオを作りたい(本記事ではあんまり関係ないけど)

## (個人的に)実現したいこと
Google Books APIでは以下URLにキーワードを入れるだけで検索結果を返してくれるという仕様があります。
https://www.googleapis.com/books/v1/volumes?q=(ここにキーワード)

これを使えば、最終的に以下のようなViewの実装が思い浮かびます。
(ただし、この解説は別記事で予定)

“`ruby:books_controller.rb
@books = 処理(keyword)
>> [book1, book2, book3, ….]
“`

“`slim:search.html.slim
= @books.each do |book|
= image_tag book.image
= book.titile
= book.author
= (略)
“`

元記事を表示

ログインshellの変更、そしてrbenvでインストールしたRubyをデフォルトにする方法

ゴールはrbenvでインストールしたRubyをデフォルトで開けること。
→その設定が書かれた.bash_profileというファイルを
 デフォルトで読み込んでもらえないというのが問題でした。

前回記事
https://qiita.com/hacchi_mom/items/2095e6ac7aecd03f131a

# .bash_profileについて

まず.bash_profileってなんなんだというところから調べると
【ログインの際に読み込まれる設定ファイル】とのこと。

そして重要なのは、その設定ファイルは
【ログインshellがbashのときに読み込まれるもの】
ということ!!!!

# ログインshell問題

ログインshellとはログイン時に起動するshellのことですが
そもそも私の起動時のログインshellはbashではなくzshだったのです。

Terminal起動時に毎回まず`bash`と一度打ってから
全ての作業を始めておりました…そういうもんだと思っていました。笑

初歩すぎること書いててすいません。。。
だから.bash_profileを読み込んでもら

元記事を表示

Rails環境下でembulkを使って快適に数十万件のデータを取り込む

こんばんわ。人に裏切られるのと同じくらいの仕打ちを受けて、最近意気消沈しているプレイライフエンジニアの合原です。

今回は弊社でのembulkの活用事例について、まとめます。

# embulk活用前
弊社では、特集記事や遊びのプラン記事では、グルメやホテルの紹介もあり、漏れなく、アフィリエイト広告(以降アフィリエイト)を掲載しています。

> 例
> https://play-life.jp/articles/1550
> https://play-life.jp/articles/1510

こういった感じで。
また、日本全国には、グルメ・ホテルなど、数えきれないほどの店舗数があり、自ずと、各種アフィリエイト用の店舗データも大量なものとなります。
にも関わらず、embulkの活用前までは、rubyで何万ー何十万と言うデータを`insert`, `update`と。。。やっている始末でした。

# こんな時こそのembulk
embulkです。
[スクリーンショット 2020-03-04 23.28.16.png[ruby,rails]gemのバージョンのdefault設定解除方法

#1.エラーの例

“`
$gem uninstall railties -v ‘6.0.2.1’ #アンインストールコマンドです
~中略~
gem “railties” cannot be uninstalled because it is a default gem #エラー文
“`

railsやその周辺のgemをダウングレードするべく、最新のgemに対し上記のアンインストールコマンドを打ったところその下のようにエラー文をだしました。そのエラー解決についてあまりネット上に記載がなかったので、解決方法を記載します
※railsなどのgemのバージョンを下げるには”インストールされている最新のgemのバージョン=反映させたいgemバージョン”とするため、必要なバージョン以上の全てのバージョンをアンインストールする必要があります

#2.エラーの原因
コマンドの意味をよく調べずに`gem update –default`というコマンドを打ったところ、local( /Users/kontatomoya/.rbenv/versions/2.5.1/lib/ruby/gems/2.5

元記事を表示

Wheneverを使用したタイムセール機能の実装(開発環境)

## はじめに
本記事は自分自身の備忘録として書いていますが、同じような実装を考えている方々の参考になればと思います。
また、私と同様、プログラミングを初めたばかりの方々向けに投稿していますので、できるかぎりシンプルに記載していきます!

※ runner以外のコマンドや crontab などの説明は本記事では割愛しています。

## 開発環境
Ruby : 2.5.1
Rails : 5.0.7.2
Whenever : 1.0.0

## 実現したいこと
ネットショップなどを想定して、出品中の商品全品を定期的に値下げしたい。
また、処理を自動で行いたい。

具体的に以下の1, 2を繰り返し実行したい。

1. 毎週末(土日)に全商品が10%オフになる
2. 毎月曜日に元値に戻す

## 実装の流れ
よくある、「週末は10%オフのセール!」みたいなやつを Whenever を使用して実装していきます。

### 前置き
まず、定期実行をする際に重宝するのが Whenever という Gem です。
タスクに登録して好きなタイミングで自動実行してくれます。
学習コストが低く、私のよう

元記事を表示

Rubyで小数点以下の計算をする時に気をつける事

忘れがちなのでメモ

## 問題だったところ

ふと全国の小学生の中からタレントって何人くらいいるだろうなって思ってRubyで計算してみたところ0が結果として出力されたのでちょっと期待と違うなーって思った。

“`
~  irb 17.8m  Wed Mar 4 21:49:20 2020
irb(main):001:0> 405/644900
=> 0
“`

## 解決策

なんでかなと思ったがRubyには便利なClassオフジェクトがあるので一度確認をしてみる

“`
irb(main):003:0> (405/644900).class
=> Integer
“`

想定していたみたいに、小数点以下の割り算をする場合はデータ型をFloatにしてあげないといけないのんでこのように変更

“`
irb(main):005:0> 405/644900.to_f
=> 0.0006280043417584122
“`

こうする事で浮動小終点の計算ができる

##

元記事を表示

超最低限のRailsアプリを丁寧に作る(もう一度きちんと復習して初心者を卒業しよう)

# この記事の基本的な方針
0からアプリケーションを立ち上げるとき、どういう手順で行うでしょうか?
考えれば考えるほどやりたいことややらなければならないことが溢れてくると思いますが、
「全てのアプリケーションに共通した超最低限のものをまず組む」、そして「必要に応じてどんどん拡張してゆく」が正しい手順です。
では全てのアプリケーションに共通した超最低限のものとはなんでしょうか?
それはログイン機能です。
ここでは、「新規登録画面」・「ログイン画面」・「インデックス画面」のたった3画面のアプリを作ります。インデックス画面は、ログイン状態であれば「自身のemailアドレス」と「ログアウトのリンク」が表示され、非ログイン状態であれば「ログインのリンク」が表示されます。
# 想定する読み手
既に一度Railsアプリをチュートリアルやスクール等で作ったことがある方を想定しております。
Mac使用で、パソコンの環境構築は完了していることが前提です。
# 具体的なコーディング手順
## ①アプリを立ち上げる
まずターミナルを開き`cd`コマンドを使い、アプリを立ち上げたい場所に移動します

元記事を表示

accepts_nested_attributes_forとfields_forを使ってデータを保存で苦戦した(has_one とbelongs_to 使用)

環境 rails 5.2.3 ,ruby 2.5.1

# 問題点
taskの内容は保存されるのにdaytimeのデータは全く保存されない!
## model task
class Task < ApplicationRecord has_one :daytime accepts_nested_attributes_for :daytime end ## model daytime class Daytime < ApplicationRecord belongs_to :task ,optional: true end # 改善点 tasks_controller.rb - before def new @task = Task.new @task.daytimes.new end - after def new @task = Task.new @task.build_daytime end @task.daytimes.newだと undefined method `new' for nil:NilClassとエラーが出ていたので @ta

元記事を表示

initializeメソッドについて

#はじめに
「TECH CAMP エンジニア転職(旧名”TECH::EXPERT エンジニアクラス”)」に参加して数日、毎朝のドリルで出てきた課題を受ける中で、すっかり存在を忘れていたinitializeメソッド。
知識として定着させるために、一旦ここでまとめておこうと思い投稿しました。
(初投稿でドキドキです(笑))

##initializeメソッドとは
クラスからインスタンスを作成する際に、インスタンスができたタイミングで実行される処理。です。

クラスはよく”設計図”って言われているやつですね。
(これについても後日備忘録としてまとめたい)

つまり、設計図からモノを作成するタイミングで、initializeメソッドに書かれた内容を実行しちゃう。
お節介焼きなメソッドってことですね。

##今回の出題内容
今回の出題内容はこんな感じ(さすがにちょっとアレンジしています)

“`ruby:drill.rb
class Profile

def initialize(part, genre, gear)
@part = part
@genre = genre

元記事を表示

Hamlでbuttonタグにclassを指定する方法

Hamlでbuttonタグにclassを指定するのに苦労したので、メモ程度に残しておきます。

“`HAML
%button{class: “HamlBtn”, type: “submit”}ボタン
“`

このようにするとhamlでもbuttonタグにclass名を指定することができます。

元記事を表示

Rails destroyすると意図しないidが最小のデータが消える

# 凡ミスの備忘録的に残す

## 発生したこと

agathaテーブル

| id | name |
|:—————–|:—————–|
|1| オーエン夫妻 |
|2| エミリー・キャロライン・ブレント |
|3| トマス・ロジャース |
|4| ジョン・ゴードン・マッカーサー |
|5| エセル・ロジャース |
|6| アンソニー・ジェームズ・マーストン |

このようなテーブルがあって、id=6の削除を行った。(つもり)

“`rb

christie = Agatha.find_by(6)
christie.destroy
// => id:1のオーエン夫妻が削除される。
“`

思い通りの結果にならない。なぜ。。

## SQLみたら判明した

`christie = Agatha.find_by(6)`で実行されるSQLは以下だった。

“`sql
SELECT `agathas`.* FROM `agathas` WHERE (6) LIMIT 1
“`
WHERE句が意味を成さないので、これで取得できるの

元記事を表示

Ruby on Railsについて(基礎/コマンド)

# 最初に
自身で学習してきた内容を書き出していきます。
基本的には自分自身でわかるような内容になりますので、ご容赦ください。
また、誤っている点がありましたら、コメントにてご指摘ください。

(要確認)マークがあるものは、「実行前に必ずググる」べき内容。

# Subline Text
下記はSubline Textを使用した開発を前提に進めます。
また、自分自身でも理解しやすいように、拡張子は基本的にHTMLにしています。

# index
– アップデートエラー
– 新規アプリケーション作成
– controller
– (view)
– ルーティング
– model

# アップデートエラー
Ruby on Railsのアップデートによる可能性が高いエラー

“`terminal:
Errno::EPERM: Operation not permitted @ chown_internal –
/tmp/bundler2018mmdd-27024-qf4sfs/bin
An error occurred while installing [gem名] (x.x.x

元記事を表示

ruby の install & 設定

# rbenv install
“`bash
brew install rbenv
“`

#ruby-build install
“`bash
brew install ruby-build
“`

#zprofile に設定を追加
“`bash
echo ” >> ~/.zprofile
echo ‘# rbenv’ >> ~/.zprofile
echo ‘export PATH=”~/.rbenv/shims:/usr/local/bin:$PATH”‘ >> ~/.zprofile
echo ‘if which rbenv > /dev/null; then eval “$(rbenv init -)”; fi’ >> ~/.zprofile
source ~/.zprofile
“`

#ruby install
“`bash
# install 可能な version は rbenv install –list で確認
rbenv install #{rubyのversion}
rbenv rehash

# default のバージョンに指定する場合は

元記事を表示

[ancestry]ドロップダウンのメニューをhoverっぽく横開きにしたい!!

## 関連リンク
[ancestry導入](https://qiita.com/i-to-to-to-mi/items/ec8cd37c7a5de7244529)

##はじめに
実際に使うのはjqueryぽい。
中でも下記2種が比較的よく検索に引っかかりました。

mouseover()とhover()
なにが違うの?
まずここで困惑しました。どちらも作ってみて今回はhoverで実装いたしました。
でも完全ではないので調べ直します。

##違い
[参照](https://www.flatflag.nir87.com/hover-1691#mouseover)
・jQueryでマウスを乗せたときにイベントを発生させるhover()ですが、cssを使った処理や画像の切り替え、動的に生成した要素にhover()を効かせる。

・mouseover()との違い
hover()はmouseover()と違って、子要素から親要素へのバブリングが起きません。

hover()はバブリングは起きないため、特別な理由がなければhover()を使えばよいでしょう。

***いまいちわからない。。***

元記事を表示

[WIP]ChatSpace -CHARACTER’S WAR-

#はじめに
**これはメモ帳です**。
TECH CAMPというプログラミング教室に通っている添野といいます。
TECH CAMPでは「**ChatSpace**」という簡単なwebチャットアプリを開発しますが、
私はこれを改造し、**ゲームアプリ化**を図っています。この経緯をここに示し、更新していきます。
TECH CAMP受講中の方や、Railsを用いて行うゲーム開発にご興味がある方は、是非ご一読ください。

#使用言語、ライブラリ等
Ruby,Rails,HTML,CSS,JavaScript,jQuery,SQL
エディタ:vscode

#ゲームタイトル(アプリ名)
***ChatSpace -CHARACTER’S WAR-*** です。

#どんなゲーム?
チャットアプリ内で**戦争を行います**。

ChatSpaceはチャットアプリなので、文字列を投稿できます。
私はその文字列たちを**戦闘させる仕組み**を作っていきます。

ユーザーがやることはシンプルで、文字列を登録するだけです。

#ルール
ユーザーは「**チーム**」を編成できます。
チームとは、字数4~1

元記事を表示

WEBrickでちょっとしたApplicationサーバーをたてる

# 背景

Faradayを使って外部のAPIからデータを取得するスクリプトを書いているけど、HttpStatusによる挙動をテストしたい。外部APIなので、いろんなレスポンスのHttpStatusを自由に変更できないので、自前でテスト用のサーバーを用意したいけど手間を掛けたくない。そんな時にWEBrickで簡単に環境を作れるよ、というお話。

# Webrickの起動と使い方

WEBRickサーバーの起動用スクリプトと、ページ用のスクリプトを用意する。

“`webrick.rb
#!/usr/local/bin/ruby
# frozen_string_literal: true

require ‘webrick’
opts = {
BindAddress: ‘0.0.0.0’,
Port: ‘7777’,
DocumentRoot: ‘./’,
CGIInterpreter: ‘/usr/local/bin/ruby’ # 環境による。DockerのRubyコンテナならこれでいい
}

server = WEBrick:

元記事を表示

【rubocop】こんな警告文がたくさん出た、Please set Enabled to either `true` or `false`

# rubocopの0.8.1で警告が出た、Please set Enabled to either `true` or `false`
このバージョンで新規に追加されたオプションがあると警告が出るようです

今回はこの3つ

“`
– Style/HashEachMethods (0.80)
– Style/HashTransformKeys (0.80)
– Style/HashTransformValues (0.80)
“`

設定ファイルで有効か無効化を選んで指定してくださいと言われてます。

version1まで、この3つのオプションは任意で有効にするか、無効にするかを選べます。
version1になると強制的に有効になるので、今のうちから true にしておくのが良いでしょう。

“`
The following cops were added to RuboCop, but are not configured. Please set Enabled to either `true` or `false` in your `.rubocop.yml` file:

元記事を表示

railsルーティングオプション「ネスト」について

#ネストオプションについて
ネストするとルーティングを「/boooks/本の投稿のid/favorite/いいねのid」のようにIDの後にIDを持ってくることができます。

例えば以下のテーブルとコントローラー名で本の投稿に「いいね」機能をつける場合。

###コントローラ名
本の投稿「books」
いいね機能「favorites」

###テーブル
![Untitled Diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594922/ad7f674d-b6f7-637f-2afb-5923089add49.png)

いいね機能関連のルーティングを「/boooks/book_id/favorite/favorite_id」
としたいです。

この場合、以下のようにネストせずにルーティングを行うと。

“`ruby:routes.rb(ネストして無い場合)
resources :books
resources :favorites, only: [:create, :destroy

元記事を表示

OTHERカテゴリの最新記事