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

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

ActionMailerでUserモデルの属性がnilになってしまう問題

# 実行環境
– Rails 6.0.1

# やろうとしていたこと

#### ユーザーの新規作成時にメールを送信

“`app/controllers/users_controller.rb
class UsersController < ApplicationController def create @user = User.new(user_params) if @user.save UserMailer.activation(@user).deliver_later redirect_to root_url else render "new" end end end ``` #### ユーザーオブジェクトを渡して ``` app/mailers/user_mailer.rb class UserMailer < ApplicationMailer def activation(user) @user = user mail(to: @user.email, subject

元記事を表示

rails-tutorial第10章

###modelだけ単数形の理由
modelは型に当たるので、それが複数形というのはちょっとということらしい。

#edit updateアクションを実装しよう

###まずはeditアクションをコントローラに実装

“`app/controllers/users_controller.rb
class UsersController < ApplicationController def show @user = User.find(params[:id]) end def new @user = User.new end def create @user = User.new(user_params) if @user.save log_in @user flash[:success] = "Welcome to the Sample App!" redirect_to @user else render 'new' end end def edit

元記事を表示

rails-tutorial第9章

###8章補足。
sessionを変数と考えていたが、正確には
sessionメソッドを使うと、ユーザーIDなどをブラウザに一時的に保存できるということである。

#発展的なログイン機構

sessionだけを使ったログインだとサーバーやブラウザを閉じてしまうと、またログインが必要となる。そこを改善できないものだろうか。

ベターなのは、ユーザーの意思で、期限のあるセッションか、永続的なセッションかを選べるようにするといい。

###cookiesとsessionの違い。

###超わかりやすい説明。

cookiesは診察券、session idは整理番号と考えるとわかりやすい。
cookiesはクライアント側に保存されるので、その情報から、以前何を買ったとかショッピングカートに入れたとかがわかる。

session idもcookieに保存されるのだが、session idはブラウザとサーバーの通信状態を呼ぶから、
別のページに移動したり、別のデバイスから入ろうとすると、その時点でsession idはsessionというハッシュから削除されてしまう。

なので、たとえcook

元記事を表示

rails-tutorial第8章

#ログイン機能を作ろう!!

モデルを使わないSessionリソースを扱う。

###Sessionsコントローラを作ろう

$ rails generate controller Sessions new

###ルーティング設定

“`config/routes.rb
Rails.application.routes.draw do
root ‘static_pages#home’
get ‘/help’, to: ‘static_pages#help’
get ‘/about’, to: ‘static_pages#about’
get ‘/contact’, to: ‘static_pages#contact’
get ‘/signup’, to: ‘users#new’
get ‘/login’, to: ‘sessions#new’
post ‘/login’, to: ‘sessions#create’
delete ‘/logout’, to: ‘sessions#destro

元記事を表示

【Rails】seedで初期データ作成

# seedで初期データ作成

### 目次
1. 初期データ作成にあたって
2. seedファイル作成

## 1. 初期データ作成にあたって
ユーザー機能に管理者権限を追加することになりました。
管理者ユーザーを作成するため、私は “`rails c“` から管理者ユーザーの作成を行いました。
他の開発メンバーにも、管理者ユーザーの作成を行ってもらいたいのですが、 “`rails c“` から各々、作成するとなると手間になったり、忘れてしまう可能性を考慮し、seedファイルを作成して管理者ユーザーを作成してもらうことにしました。

## 2. seedファイル作成
今回は管理者ユーザーのデータを作成します。
“`db“` 以下に “`db/seeds/admin_user.rb“` を作成します。
以下のようにseedファイルを作成します。

“`db/seeds/admin_user.rb
User.create(admin: 1, email: “admin@admin.jp”, password: “123456”)
“`

ターミナルで以下のコマンドを入

元記事を表示

Docker で padrino の開発環境を作ってみた

Docker で `Ruby on Rails` を動かす記事はよく見かけるが、 `padrino` はあまり見ないので勉強がてら試してみたときの手順メモ
`padrino g project` で強制的にサブディレクトリが作られるため、Docker イメージの作成方法が少々面倒になっている

# 検証環境

“`
Windows10 Home Edition
VirtualBox 6.1.10

# Docker Host OS (CoreOS)
$ uname -a
Linux default 4.9.93-boot2docker #1 SMP Thu Jul 19 18:29:50 UTC 2018 x86_64 GNU/Linux

Docker version 18.06.1-ce, build e68fc7a
docker-compose version 1.20.1, build 5d8c71b
“`

# インストール手順の概要

1. 最初に `padrino g project` で作成された初期プロジェクトが入った Docker イメージを作成する ( `ba

元記事を表示

Rails Tutorial 第6版 学習まとめ 第4章

###概要
この記事は私の知識をより確実なものにするためにRailsチュートリアル解説記事を書くことで理解を深め
勉強の一環としています。稀にとんでもない内容や間違えた内容が書いてあるかもしれませんので
ご了承ください。
できればそれとなく教えてくれますと幸いです・・・

出典
[Railsチュートリアル第6版](https://railstutorial.jp/)

###この章でやること
Rubyの文法や構造について今後のために学習する。

###動機
Rubyについてほぼ知らなくてもRailsを使えばある程度はコードが書けてしまうという便利さを知った一方
Rubyについて知らないと開発の効率が悪いうえに、コードの理解力にも限界がある。
ここでRubyそのものについても学習する。

いつも通りトピックブランチを作って作業する。

“`
$ git checkout -b rails-flavored-ruby
Switched to a new branch ‘rails-flavored-ruby’
“`

####組み込みヘルパー
前章で作成したapplication.ht

元記事を表示

[Rails]AWS EC2インスタンスの環境構築

今回はAWS EC2インスタンスの中でアプリケーションを起動するための環境構築をしていきます。

#前提条件
自身のコンピュータとEC2インスタンスとの間でSSH接続をして、EC2インスタンスにログインできている。

#設定用のツールをインストール
最初にyumというコマンドを使ってこのサーバに元々あるプログラムをアップデートします。
こうしたプログラムをパッケージと呼びます。

##yumコマンド
Linuxにおけるソフトウェア管理の仕組みです。MacOSにとってのHomebrewと同じ役割を果たします。
yumコマンドを利用することで、yumの管理下にあるプログラムのバージョンを管理したり、一括でアップデートしたりできます。

##パッケージ
LinuxOS下における、ある役割/機能をもったプログラムの集合です。
ソフトウェアとも、ライブラリとも呼べます。
あくまでもLinuxOSでは、ある役割/機能をもったプログラムの集合のことをパッケージと呼ぶよ、ということです。

##パッケージのアップデート

本番環境内で実施していきます。

“`
[ec2-user@ip-172-31

元記事を表示

とりあえずRubyの拡張ライブラリでHelloWorldする

# はじめに

Cで書いたライブラリをRubyから呼び出す方法を簡単に説明します。
公式を含めいくつか説明するサイトはあるのですが、もっとシンプルに教えてほしかったので……。

## 参考

https://ruby-doc.org/core-2.5.3/doc/extension_ja_rdoc.html
https://qiita.com/suketa/items/ab6b88093de4a54b3b06

## 作ったサンプル

https://github.com/hakua-doublemoon/rb_ext_hello

# さっそく作ってみる
## CでRuby用のライブラリを作成する

上に示したサンプルの[Cのコード](https://github.com/hakua-doublemoon/rb_ext_hello/blob/master/hello.c)のとおり。
Initの関数でクラスを定義し(モジュールの定義もできる)、メソッドの定義とそれに対応する関数を作ります。
メソッドにおいては、公式ドキュメントの冒頭に書いてありますが、RubyとCでは型の使い方が違うの

元記事を表示

VScodeでpryと打つとbinding.pryに変換してくれる設定

##はじめに
Railsで開発していると必ず使うであろうデバッグ(binding.pry)をVScodeで簡単に出せる方法を紹介します。

##設定
###1 VScode上でcommand +shift + P → Configure User Snippetsを選択
スクリーンショット 2020-06-06 20.37.56.png

###2 ruby.jsonを選択
スクリーンショット 2020-06-06 20.38.56.png

元記事を表示

Ruby シンボルについて

# シンボル
シンボルとは、任意の文字列と一対一に対応するオブジェクトのこと。
シンボルの構文は、シンボルはコロン(:)に続けて任意の名前を定義する。

`:シンボルの名前`

(例)

“`ruby
:sushi
:ruby
:pen
“`

## シンボルと文字列の違い

“`ruby
:sushi.class # =>Symbol
‘sushi’.class # =>String
“`
シンボルはSymbolクラスのオブジェクト
文字列はStringクラスのオブジェクト

“`ruby
string = ‘sushi’
string.upcase! # => “SUSHI”

# シンボルは、イミュータブルなので、破壊的な変更は不可能
symbol = :sushi
symbol.upcase! # => ruby.rb:5:in `

‘: undefined method `upcase!’ for :sushi:Symbol (NoMethodError)
“`

文字列は破壊的な変更が可能
シンボルは不可能

ミュータブルは、`変更可能な`という

元記事を表示

写真ACのダウンロード数をグラフ化したい【スクレイピング実装編】 〜1日10行コーディング〜

## 3日目

今回は写真のダウンロード数がグラフ化されるようなものを作ろうと思います。

**詳細**
写真ACという著作権フリーの画像投稿サイトがあるのですが、そこでは前日にダウンロードされた数が出るのですが、次の日になったら2日前のダウンロード数とかが見れないので1日1回取得してそれをDBに入れて最終的にグラフにするといったことをしようと思います。
https://www.photo-ac.com/
![](https://i.imgur.com/t4lJqLG.png)
(これでアカウント止められてたりしたら自己責任でお願いします笑)

### 【技術テーマ】
スクレイピング

### 言語
* ruby

### 目標成果物
今日のところは一旦サイトから情報を取得する部分を実装したいと思います。

### コードと資料

#### 1. htmlから必要な情報を取得
前回とは違い、今回はログイン周りが関係してくるのでMechanizeを利用します。

“`Gemfile
source ‘https://rubygems.org/’

gem ‘nokogiri’
gem ‘

元記事を表示

AtCoderでRuby学習11 よく使う標準入力の受け取り方

## はじめに
Rubyおよびアルゴリズムの学習の一環として競技プログラミングに参加しています。
ここでは、そのための学習の中で学んだことをアウトプットしていきます。
今回は、これまで問題を解く中で使った「標準入力の受け取り方」をまとめておきたいと思います。

## ひとつの要素を受け取る

### 文字列

“`ruby
入力例
Ruby
“`

“`ruby
s = gets.chomp
# print s
# => Ruby
“`
chompメソッドは、文字列の末尾から改行コードを取り除いた文字列を返します。
受け取りたい文字列のみをしっかり受け取る為に付けておくと安心です。

### 整数

“`ruby
入力例
64
“`

“`ruby
s = gets.to_i
# print s
# => 64
“`
getsメソッドで受け取った標準入力は、String(文字列)型として受け取られます。
to_iメソッドを後ろに付けることで受け取った文字列をInteger(整数)型に変換します。
この場合は、chompメソッドは必要ありません。

## ひとつの要素

元記事を表示

【Rails】いいね機能の実装

## 始めに
忘れるといけないので、deviseと合わせたいいね機能の実装を簡単にまとめました。

## 前提 
環境
 Rails 5.2系
 Ruby 2.6系

使用ライブラリ
 devise
 Slim

## 実装

### 1.Railsアプリの作成

“`
$ cd
$ rails new favorite_function
$ cd favorite_function
“`

### 2.gem deviseとSlim導入

“`ruby:Gemfile

gem ‘slim-rails’ #Slimのジェネレータを提供
gem ‘html2slim’ #ERB形式のファイルをslim形式に変換してくれる
gem ‘devise’
“`

“`
$ bundle
“`

### 3.deviseをインストール

“`
$ rails g devise:install
create config/initializers/devise.rb
create config/locales/devise.en.yml
=

元記事を表示

JavaScriptでサムネイル画像の切り替え方法

## JavaScriptを使ってサムネイル画像を切り替える方法

イメージ↓

[![Screenshot from Gyazo](https://gyazo.com/b9d688eb77594835913c9b2abce422a7/raw)](https://gyazo.com/b9d688eb77594835913c9b2abce422a7)

JavaScriptを使ってimageの差し替えを実装しました!

*ただの備忘録になっていることをご了承ください

`手順`

1.HTMLファイルを作成し、画像のimageを貼る
2.cssでコーディング
3.JavaScriptで画像をクリックした時のメソッドを書いていく

ざっくりすぎますね笑 実際に書いていって説明します。

## HTMLを書く

“`html

 
元記事を表示

includeメソッド

#includeメソッド

Railsのincludesは、関連している複数のテーブルからデータを取得してくるときのアクセス回数を大きく減らすことができるメソッド。

“`ruby.rb
@events = @events.includes(:member)
“`

includesメソッドに対して関連づけの名前を与えると実際のクエリの直後に関連づけられた
モデルオブジェクトを一括して取得するクエリが発行。
上記の例であれば:memberオブジェクトを一括して取得するクエリを発行してくれる。

発行されるsqlを見てみると…

“`sql
SELECT “staff_members”.*FROM “staff_members”
WHERE “staff_members”.”id” IN (1,2,3,4,5)
“`

というようなsqlが発行される。
つまり一件一件selectするのではなくwhere句を使って
一括でSQLを発行することでN+1問題を解決してくれる便利なメソッド。

元記事を表示

[Rails] devise を利用 ゲストユーザー機能( ポートフォリオ 用)

初めに

ポートフォリオ用のWebサイトには必須と言われるゲストユーザーログイン機能。
deviseを使用したゲストログイン機能について紹介します。
前提として

deviseの導入が完了している事
以下が参考記事となります。
・ https://qiita.com/ShinyaKato/items/a098a741a142616a753e

ゲストログイン機能の実施

“`config.routes.rb
# 以下を追加
devise_for :users, :controllers => {
registrations: ‘users/registrations’,
sessions: ‘users/sessions’
}

devise_scope :user do
post ‘users/guest_sign_in’, to: ‘users/sessions#new_guest’
end
“`
“`app.controllers.users.sessions.controller.rb

#以下を追加
def new_g

元記事を表示

[初心者]Ruby on Rails のテストフレームワーク Rspec の導入

## Ruby でのテストフレームワークと Rspec について
Rubyのテストフレームワークで有名なものは
– Rspec
– Test::Unit
– Cucumber
などがあります。この中で Rspec は一番使われているBDDテストフレームワークです。

## テストの種類

Rails チュートリアルではいくつかの種類のテスト使われています。

モデルやビューヘルパー単体の動作をチェックする単体テスト、コントローラー/ビューの呼び出し結果をチェックする機能テスト、ユーザーの実際の操作を想定し、複数のコントローラーにまたがるアプリの挙動をチェックする統合テストがあり、システム開発では以上のテストを行うことが多いです。

## 導入
Gemfile に rspec に関する gem を入れます

“`
group :development, :test do
gem ‘rspec-rails’
end
“`
必要に応じて、[FactoryBot](https://github.com/thoughtbot/factory_bot/blob/master/GE

元記事を表示

Rubyのメモ化における「||=」と「instance_variable_defined?」の違い

# これはなに?

Rubyのメモ化の際の「||=」と「instance_variable_defined?」の違いをまとめた記事です。

Rubyのメモ化を調べると以下の2通りの書き方があることを知りました。

“`ruby
# ||=のメモ化
def current_user
@current_user ||= find_by(id: 1)
end
“`

“`ruby
# instance_variable_defined?のメモ化
def current_user
return @current_user if instance_variable_defined? :@current_user
@current_user = find_by(id: 1)
end
“`

↓こちらの記事によると挙動に違いがあるようです。
[Rubyでメモ化するときの話 – yuji.developer’s graffiti blog](https://blog.yujigraffiti.com/2018/09/ruby-memorization.html)

> 右辺が偽を返

元記事を表示

Ruby で解く AtCoder ABC110 C 文字列操作

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。

# 今回のお題
*[AtCoder Beginner Contest C – String Transformation](https://atcoder.jp/contests/abc110/tasks/abc110_c)*
Difficulty: 946

今回のテーマ、文字列操作

異なる英小文字ですので、逆に考えますと重複を考慮するということで、重複した文字列と言えば**ハッシュ**。
コインの裏の裏が表であるように、ハッシュの逆の逆を調べます。
# Ruby
“`ruby.rb
s = gets.chomp.chars
t = gets.chomp.chars
h = {}
g = {}
s.size.times do |i|
if h[

元記事を表示

OTHERカテゴリの最新記事