- 1. 【Rails】authenticateメソッドが返すもの
- 2. ActiveAdmin の各パーツのカスタマイズ方法がドキュメントのどこに載っているのかざっくり調べた
- 3. 独学でエンジニアを目指してからの三ヶ月間の学習振り返り
- 4. 【メモ】条件分岐
- 5. 【備忘録】Ruby : モジュールの使い方(Mix-in,多重継承)
- 6. Ruby の Enumerable を再実装するときに正解が見たくなったら TruffleRuby の実装を見るとわかりやすい
- 7. Ruby の Enumerator に with_last を追加してみた
- 8. 【Rails】Rails6系とMySQL8系の組み合わせの開発環境をDockerだけでつくる
- 9. Rubyでもいい感じにパスワードを出して欲しい
- 10. ハッシュからキーを取り出して配列に格納する
- 11. 【slice と slice! の使い方】(ruby)
- 12. スクリプト言語 KINX/基本編(2) – 制御構造
- 13. 【Rails】入力された値を元にGETリクエストを送ってjsonを取得し、DBに保存する
- 14. rubyXLでexcelデータを出力する際に悩んだこと。
- 15. Devise viewのデザインを編集可能にする
- 16. Rails初心者の「N+1って何ですか?」にのベテランエンジニアさん超絶わかりやすいアンサー!!!
- 17. Google Mapを「投稿画面」と「詳細画面」の2か所に実装してみた。
- 18. 読書ログ『メタプログラミング Ruby 第2版』4章
- 19. 多対多テーブルの作り方
- 20. 【Ruby on Rails 5】Instagram風簡易SNSアプリを作ってみよう!(Techpit教材)を終えて
【Rails】authenticateメソッドが返すもの
#はじめに
モデルのテストを書いているときに、authenticateメソッドの検証で少しつまづきました。
簡単な内容ですがエラーの理由・対策を記載します。#authenticateメソッド
has_secure_passwordメソッドをユーザーモデルで呼び出すだけで使えるようになるメソッド。
パスワードを引数としてユーザーの認証を行うことができる。#ユーザーモデルのテスト(RSpec)
まずは誤ったパスワードを入力した場合のテスト。
(FactoryBotではパスワードを”password”と設定)“`
(略)
context ‘正しくないパスワードの場合’ do
it ‘認証がされない’ do
expect(user.authenticate(“invalid_password”)).to eq(false)
end
end
(略)
“`
問題なく通過。次に、正しいパスワードを入力した場合のテスト。
“`
(略)
context ‘正しいパスワードの場合’ do
it ‘正常に認証される’ do
ActiveAdmin の各パーツのカスタマイズ方法がドキュメントのどこに載っているのかざっくり調べた
## はじめに
最近 [ActiveAdmin](https://activeadmin.info/index.html) について、ドキュメントを読みながらカスタマイズを試しているのですが、画面の各パーツがドキュメントでどこを指しているのかがわかりづらかったので、備忘で整理しておきます。
## ざっくり全体感を掴むには
[ActiveAdminのドキュメントのトップページ](https://activeadmin.info/index.html) にのっている説明画像をまず見るとイメージがつきやすかったです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222030/569f6085-0963-ec78-ab0c-d6be80632291.png)
## 各パーツについて
ActiveAdmin が用意しているデモ画面を参考にします。
http://demo.activeadmin.info/admin/users
### Global Navigation
ヘッダ
独学でエンジニアを目指してからの三ヶ月間の学習振り返り
# はじめに
初めまして YKと申します今回は振り返りで、どのように何を学習してきたかまとめます。
##学習時間についてと挫折防止のコツ
継続が不得意な方は学習を時間を図るのは個人的に勧めません。
何時間やったかが重要ではなく、どこまでやったかが大事です。また1日2時間やると決めたところで勉強しなきゃ感が出てきて挫折する確率も上がると思います。
なので1日の平均学習時間は図っていませんが4時間以下の日は無いと思います。
挫折防止のコツとしてはなりたい自分をイメージする事と勉強していると思わず趣味として知識を得ているんだと洗脳すると継続して続けられると思います:smirk:
私は早くアプリ製作したいというモチベによって苦なくプライベートの時間は殆どプログラミングしていました。
#なにを学習してきたか?(時系列順)
###11月5日~12月5日
## ・Progate 「HTML & CSS」「Javasript」 全コース
最初は王道のProgateさんにて学習を開始しました。意識した事:このころはWEBコーダーを目指していたので基本的なWEBサイトの構造をおおまかに理解
【メモ】条件分岐
if maxmin.to_i <= 14 Auter hoode-f pant shose ================================================================== maxmin.to_i <=14 1 2 3 4 5 TOP auter-f, TOP2 jaket-s inner t-long pant shose 6 8 10 12 14 TOP auter-f inner t-long pant shose 7 9 11 13 TOP auter innner Hoode-f t-long pant shose 15 16 17 18 TOP Jaket-s Jaket-m inner hoode-f t-long pant shose 19 20 21 22 24 26 TOP Jaket-s Jaket-m hoode-j inner t-long t-short pant shose 23 25 27 28 TOP ho
【備忘録】Ruby : モジュールの使い方(Mix-in,多重継承)
“`ruby:sample.rb
module ActionTarget
# モジュール
def throw
puts “#{@person}は#{@object}を投げた”
enddef kick
puts “#{@person}は#{@object}を蹴った”
end
endclass ActionPlace
# 継承元クラス
def run
puts “#{@person}は#{@place}で走った”
enddef sleep
puts “#{@person}は#{@place}で寝た”
end
endclass Person < ActionPlace # クラスを継承 include ActionTarget # モジュールのメソッドが使えるようにミックスイン attr_accessor :object,:place,:person def initialize(object,place) @object = object @place = place @person = "私" end en
Ruby の Enumerable を再実装するときに正解が見たくなったら TruffleRuby の実装を見るとわかりやすい
# `Enumerable` の再実装やってると正解が見たくなる
[仲間で集まって Ruby の `Enumerable` のメソッドを再実装する遊び](https://qiita.com/akinov/items/42292674587dd532d6ae)をよくやっているんだけど、書いたら答え合わせがしたくなる。そういうときは [CRuby の実装](https://github.com/ruby/ruby) を見るのが一番なんだけど、Cが読めないとかなり辛い。
# 例: `Enumerable#collect` の CRuby の実装(?)
“`c:enum.c
static VALUE
enum_collect(VALUE obj)
{
VALUE ary;
int min_argc, max_argc;RETURN_SIZED_ENUMERATOR(obj, 0, 0, enum_size);
ary = rb_ary_new();
min_argc = rb_block_min_max_arity(&max_argc);
Ruby の Enumerator に with_last を追加してみた
# したいこと
Rails で HTML を生成するとき、リストをループして、末尾だけちょっと違うものをレンダリングすることが良くあると思う。
“`html:ユーザのリストをレンダリング
aさんとbさんとcさんです
“`これはこんな感じに書くとおもう。
“`erb:mapしてjoin
<%= users.map {|user| "#{user.name}さん"}.join('と') %>です
“`単純なものはこれで良いけど、レンダリングするものが複雑になってくると `each` にブロック渡してレンダリングしたくなる。
“`erb:こんなふうにやりたい
<% users.each.with_last do |user, last| %>
<複雑なマークアップ>
<%= user.name %>さん<%= last ? 'です' : 'と'%>
複雑なマークアップ>
<% end %>
“`こんな感じでやりたい。
# 実装
`with_index` と同じアイデアなので、 `with_index` の定義されてる [Enumera
【Rails】Rails6系とMySQL8系の組み合わせの開発環境をDockerだけでつくる
# 概要
– :point_right: この記事は弊社ァ内で行った準備作業の備忘録メモでございますわっ
– 次の新規案件に備え、RubyとRails最新版のスケルトン(?)なプロジェクトを準備する
– 各バージョンは以下の予定
– Ruby2.7系
– Rails6.0系
– MySQL8.0系
– Nginx1.17系
– redis(いちおう)
– Docker前提です
– 新規ならDockerでしょ?って、僕も過激派になっている感。
– AWS ECSでの運用が前提のため。
– Rubyのイメージは**alpine3.11**を使用。**カーネル5.4系でセキュリティも向上してる**らしい(?)し、**軽い**し[^1]、“` shell
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ruby
Rubyでもいい感じにパスワードを出して欲しい
![](https://cdn-ak.f.st-hatena.com/images/fotolife/f/ferrari458tukapai/20200227/20200227223051.png)
イメージ
確かにLinuxだったらさ、コマンドでランダムなパスワードとか出せると思うけどRubyでもやりたいじゃんと思って考え中
## やり方
securerandomというライブラリを使えばランダムな値を簡単に生成できるので便利かも
実行方法
`ruby randompw.rb [パスワードの桁数]`
“`randompw.rb
require ‘securerandom’i = ARGV[0]
#puts i
puts SecureRandom.alphanumeric(i.to_i)
“`## 感想
こんな感じにSecurerandomのライブラリを使って何桁のパスワードを出力して欲しいかを入れるだけ
こうすると、とりあえずランダムなパスワードがいい感じができるのでちょっと満足した。
ハッシュからキーを取り出して配列に格納する
## 問題
“`ruby
book = {title: “多動力”, price: 1280, impression: モチベが上がる}
“`
上記のようなハッシュからキーだけを取り出して配列に格納するにはどうしたら良いでしょうか## 方法
ハッシュに対してkeysメソッドを使用して配列に格納します。“`ruby
array = book.keys
“`出力すると
“`ruby
puts array
“`キーだけが取り出されて出力されます
“`:ターミナル
title
price
impression
“`この方法でハッシュからキーだけを取り出して配列に格納することができます。
【slice と slice! の使い方】(ruby)
sliceをあまり使っておらず、使い方を忘れていたので書き残しておきます。
#次の条件を満たすメソッドを作成しなさい(ruby)
– 任意の文字列の最初の2文字のみを出力する
– 文字列が2文字以下の場合文字列をそのまま返す
– 例えば”a”は”a”を、空文字””は””を返す#回答例
“`ruby:head_two.rbdef head_two(word)
example1 = word[0..1]
puts example1 #=> haexample2 = word.slice(0..1)
puts example2 #=> haexample3 = word.slice(0, 2)
puts example3 #=> haexample4 = word.slice!(0..1)
puts example4 #=> ha
puts word #=> yashiword = “hayashi”
example5 = word.slice!(2..-1)
puts example5 #=> yashi
スクリプト言語 KINX/基本編(2) – 制御構造
# はじめに
[前回](https://qiita.com/Kray-G/items/f1f891fe799fcc757834)の続き。過去の解説は以下を参照。概要は以下の初回記事[「スクリプト言語 KINX(ご紹介)」](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)を参照してください。
* [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* [Kinx 基本編(1) – プログラム基礎・データ型](https://qiita.com/Kray-G/items/f1f891fe799fcc757834)
* Kinx 基本編(2) – 制御構造(今回)「**見た目は JavaScript**、**頭脳(中身)は Ruby**、(**安定感は AC/DC**)」な**スクリプト言語 KINX**。オブジェクト指向と C 系シンタックスで **C 系プログラマになじむ触感** をお届け。
# Kinx 基本編(2
【Rails】入力された値を元にGETリクエストを送ってjsonを取得し、DBに保存する
## すること
今回は[GET statuses/oembed — Twitter Developers](https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-oembed)を用いてツイッターカードを表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322882/9e230f72-496a-0487-e967-4d3dba1030ef.png)
流れは以下の通りです。1. 入力されたURLからIDを取得
2. リクエストを送信
2. データを取得
2. URL, jsonをデータベースに保存
3. 保存したデータを表示### 開発環境
Ruby 2.6.5
Rails 5.2.3
MySQL 8.0.19## 実装する
### モデル
事前に、jsonを入れる予定の`t_json`カラムをマイグレーションで作成しておきます。
“`
rubyXLでexcelデータを出力する際に悩んだこと。
備忘録な意味合いで残します。
**1. テンプレートとするExcelで完全にブランクなセルに値をセットしようとするとエラーになる。**
・罫線などの情報を一切もっていないセルには、
**file[sheet_name][row][col].change_contents(value)**
こういう指定ができない。
もしこれで、nil:NilClassのエラーがでるようなら、該当のセルにスペースを一度いれておく。とかで取得できるみたい。**2. insert_rowで値を挿入すると、その下のセル結合などが壊れる。**
・仕様のようなので仕方がないが、UIで操作する単純な行の挿入のイメージとは処理が違う。挿入する行の前後は、セル結合などは極力してない方がベスト。
Devise viewのデザインを編集可能にする
#はじめに
導入当初にBootstrapを使ってデザインや配置が変更できなかったので配置できるようにしてみました。
*導入初心者向けです。# Deviseを導入
実行環境
ruby ‘2.5.3’
gem ‘rails’, ‘~> 5.2.2’
gem bootstrap-sass##Devise gemをインストール
以下をGemfileに記入し`bundle install`を実行する。“`
gem ‘devise’
“`
## Deviseのファイルを作成する。
“`
$rails g devise:install
Running via Spring preloader in process 55270
create config/initializers/devise.rb
create config/locales/devise.en.yml
===============================================================================Some setup y
Rails初心者の「N+1って何ですか?」にのベテランエンジニアさん超絶わかりやすいアンサー!!!
僕 「N+1ってデータを何回もやりとりしてしまうことのことですよね?(ぼんやり)」
先輩 「そうそう!具体的にいうとね。この例を見て欲しい」ProductモデルとPatronモデルはアソシエーションしている前提
“`rb
products = Product.all #全体の数をN件とする
#先輩「ここでN件分の一回呼び出されるよね?正確にはeachしたときなんだけど」
“`
“`rbproducts.each do |product| #先輩「ここではさっきN件分呼び出されたものを、一個一個取り出す。つまりN回分呼ぶよね」
product.patrons.each do |patron|
patron.title
end
end
“`
先輩「そうすると結局N+1回分データを取り出す作業していることはわかった?」
僕「なるほど!わかりました!」先輩「データが少ないときには特に問題にならないかもしれないのだけど、**データが数万とかたくさんのデータを扱うとき**にN+1問題はパフォーマンスを低下させてしまう原因になってしまうんだ。」
僕 「確かにそう
Google Mapを「投稿画面」と「詳細画面」の2か所に実装してみた。
# はじめに
こんにちは!現在、アウトプットの一環として個人開発を行っているんですが、エラーでボコボコにされてる今日この頃です!
という話は置いといて、本記事ではレビューの投稿機能にGoogleMapを表示させてみた話をしたいと思います!# 実装したいこと
– 投稿ページ(new)にて住所(または地名)を入力してもらう。
– 投稿ページのGoogleMapにマーカーを落とす。
– 詳細ページ(show)のGoogleMapを表示。投稿時に指定した場所にマーカーがある。# 開発条件
Ruby 2.5.1
Rails 5.2.3
Haml・Sass記法# データベース
## reviewテーブル
|Column|Type|Options|
|——|—-|——-|
|title|string|null: false|
|description|text|null: false|### Association
– has_one :spot## spotテーブル
|Column|Type|Options|
|——|—-|——-|
|a
読書ログ『メタプログラミング Ruby 第2版』4章
## 4章 水曜日: ブロック
## はじめに
– **ブロックとは、スコープを制御するのに強力なツール**
– ブロックは「呼び出し可能オブジェクト」大家族の一員
– ブロックの家族はオブジェクト指向とは異なる、**「関数型プログラミング 言語」**の流れ## ブロックの基本
– ブロックを定義できるのは、メソッドを呼び出す時だけ。
“`ruby
def a_method(a,b)
a + yield(a,b)
enda_method(1,2){ |x, y|(x + y) *3 }
#=> 10
“`– メソッド内部では、Kernel#block_given?メソッドを使ってブロックの有無を確認できる
“`ruby
def a_method
return yield if block_given
‘ブロックがありません’
enda_method #=> “ブロックがありません
a_method { “ブロックがあるよ!” } #=> “ブロックがあるよ!”
“`## ブロックはクロージャ
– ブロックのコードを実行するには、**環境**
多対多テーブルの作り方
## データベース設計
投稿(postテーブル)に対してタグ(tagテーブル)付けができる機能を作るとします
一つの投稿は複数のタグを持つことができ、一つのタグは複数のタグを持つことができる場合、そのままアソシエーションを組んでしまうとデータベースの中身が複雑になってしまいます。
そのためどの投稿がどのタグに結びついているのかを記憶するテーブルを別に作り、整理します。
## 内容
### postテーブルを作る
“`:ターミナル
rails g model Post image:text
“`### tagテーブルを作る
“`:ターミナル
rails g model Tag name:string
“`### 中間テーブルを作る
中間テーブルは各モデルの複数形を名前をスネーク型で繋げます
今回の場合はPosts_tags
postとtagの結びつきを記憶するテーブルのため各idのカラムを作ります
refarencesの型はこの後記述するマイグレーションファイルに記載するforeighn_keyの制約に対応した型になります。
foreighn_keyはpost_idやta
【Ruby on Rails 5】Instagram風簡易SNSアプリを作ってみよう!(Techpit教材)を終えて
#Techpitの【Ruby on Rails 5】教材の感想
[TechCommit](https://www.tech-commit.jp/)さんのお年玉企画にて頂いた[Techpit](https://www.techpit.jp/)教材を使って、Ruby on Rails 5で簡易アプリを作成しました。
簡単ではありますが、どのようなことを学べたのか、その感想を記します。また、当方実務経験などが全く無く、言語を独学で学んでいる程度なので、経験も知識も非常に浅いことをご了承願います。
##教材に取り組む上で必要な知識
まず、【Ruby on Rails 5】[instagram](https://www.instagram.com/?hl=ja)風簡易SNSアプリを作ってみよう!という教材は、以下の言語を使用します– HTML
– CSS
– Javascript
– Ruby必要条件は**HTML/CSS、及びRubyの基礎知識**とされています。
主な目的はRuby on Railsの流れを把握するものであり、
SNSの[instagram](https:/