- 1. Ruby on Railsでアプリを作成してみた【1】【recipegram】
- 2. Rails 複数 画像投稿 Cloudinary CarrierWave
- 3. form_withを使ったRails.fireの使い方
- 4. FactoryBot(Rails)のtraitとは
- 5. Coudn’t find Tweet with ‘id’=index [rails エラー error]
- 6. Tempfile オブジェクトから Content-Type(mime type) を取得する方法
- 7. アプリを作る その2
- 8. 【Ruby】検索問題
- 9. Rails ルーティング
- 10. form_forを使ったRails.fireの使い方
- 11. 【Rails × CircleCI】初心者がCI/CD設定で躓いたエラー集と解決法
- 12. [Ruby]ハッシュのアレコレ
- 13. memcachedの概要と動作確認
- 14. Cherry本の著者 伊藤さんによるRubyの正規表現のアウトプット①
- 15. [py2rb] lxml.etree
- 16. RailsのSTIで子クラスがfindに引っかからなくてハマった話
- 17. 【Ruby】文字数を算出するプログラム count_hiメソッド
- 18. 【MinIO】RailsアプリケーションにS3互換ストレージ MinIO を導入してみる
- 19. renderで部分テンプレートを呼び出す方法
- 20. stripメソッドとそれに関連するメソッドのまとめ
Ruby on Railsでアプリを作成してみた【1】【recipegram】
##参考サイト
[【プログラミング入門】Ruby on Rails でウェブアプリを作ってみよう ~ PART 1(イントロダクション)~ Let’s build with Ruby on Rails]
(https://www.youtube.com/watch?v=auLih2TFwio&t=647s)
Rails 複数 画像投稿 Cloudinary CarrierWave
# 環境
ruby 3.0.2
Rails 6.1.4.4# 実装
cloudinaryの登録を済ませてくださいhttps://cloudinary.com/
## gemの追加
“`ruby:Gemfile
gem ‘carrierwave’
gem ‘cloudinary’
“`“`
$ bundle install
“`## モデルの作成
PostとImageは1対多のアソシエーションで実装します“`
$ rails g model post body:string
$ rails g model image post:references, image:string
$ rails db:migrate
“`
“`ruby:models/image.rb
class Image < ApplicationRecord belongs_to :post mount_uploader :image, ImageUploader end ``` ```ruby:models/post.rb class Image < Applicati
form_withを使ったRails.fireの使い方
## form_withを使ったRails.fireの使い方
JS側からsubmitを行う方法として、Rails.fireを使う方法があります。
Rails.fireを使うとajax通信が可能になります。
form_withの中で、local: falseを指定することによって、html.erbがコンパイルされた結果のhtmlに「data-remote=”true”」が記述される様になり、ajax通信が可能になります。– html.erb側
“`
<%= form_with(model: @hoge, url: '', id: 'hoge_form', local: false) do |f| %>
<%= f.text_field :name, placeholder: 'test' %>
<%= f.button id: 'hoge_submit' ,type:'button' %>
<% end %>
“`– js側
“`
import Rails from “@rails/ujs”;$(document).on (‘turbolinks:load
FactoryBot(Rails)のtraitとは
## 概要
`FactoryBot`を使用する際の`trait`の使い方についてアウトプットしたいと思います。## traitとは
FactoryBotでテストデータを定義する際に用いるオプションのことです。
`trait`を使用することによってテストファイル内でデータを定義する際により簡潔に記載することができるようになります。## 使用例
### 前提
Userモデルにて`name`に10文字以内というバリデーションが定義されていると仮定します。
そのバリデーションについてのテストを行う際のテストデータの定義を行います。
なおテストの記載は割愛します。_*factories/user.rb*_
“`ruby
FactoryBot.define do
factory :user do
name { ‘太郎’ }trait :over_length_name do
name {‘a’ * 11}
end
end
end
“`
### traitを使用する場合
下記のように記載するだけで`name`が11文字のデータを定義
Coudn’t find Tweet with ‘id’=index [rails エラー error]
# エラー内容
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324819/724b77b6-6cf3-6a1f-492c-009af6fb4690.png)開発してるとこんなエラーがでる
「idがindexなんてTweetは見つけられなかったよ」って意味ですね!
# エラーの解説
それはそう、だってDBの中に入っているレコードのidには、「1,2,3…」のような数字で割り振られてるから、その中から検索メソッド(今回はfindメソッド)を使って「index」という文字列でidを調べてもダメだよねって事です。# エラーの原因
問題はroutesにあります。“`config/routes.rb
Rails.application.routes.draw do
# 省略get ‘tweets/:id’ => ‘tweets#show’,as: ‘tweet’
get ‘tweets/new’ => ‘tweets#new’
post ‘tweets
Tempfile オブジェクトから Content-Type(mime type) を取得する方法
## やりたいこと
Tempfile のオブジェクトを作成後、そこから Content-Type(mime type) を取得したい。
## 解決策
[marcel](https://github.com/rails/marcel) の `Marcel::Magic.by_magic` を使うと取得できる。
“`ruby
> tempfile = # PDF を Tempfile オブジェクトに変換
> Marcel::Magic.by_magic(tempfile).type
=> “application/pdf”
“`[実装](https://github.com/rails/marcel/blob/fc69a19d17de4fedca354b2404b04834b16eacd8/lib/marcel/magic.rb#L85-L88) を読むと `io` を引数に取れるみたいなので、 `File` クラスへの Delegator の `Tempfile` だけでなく `StringIO` もいけるかも(未検証)
ちなみに `activestorage` が依存し
アプリを作る その2
###ヘルパーとは
新しく作ったメソッドはカスタムヘルパー と呼ばれます。####ヘルパーを作成
app/helpers/application_helper.rb“`rb
module ApplicationHelper
def full_title(page_title = ”) # ページタイトルを作成する デフォルトの引数は空
base_title = “自作アプリ”
if page_title.empty? # 論理値テスト
base_title # 暗黙の戻り値
else
page_title + ” | ” + base_title # 文字列の結合
end
end
end
“`####full_titleメソッドを使いhtmlを作成
app/views/layouts/applicat
【Ruby】検索問題
※初心者向け
※アウトプット練習の為
※学習の復習開発環境
rails 6.0.4.4
ruby 2.6.5##問題
任意の文字列に”code”が、左から何文字目に出てくるかを返し、その数を出力するメソッドを作りましょう。**出力例:**
count_code(“codexxcode”) → 1
count_code(“aaacodebbb”) → 4
count_code(“cozexxcode”) → 7ヒント: indexメソッドを使用しましょう
**index**
indexメソッドは、文字列や配列の中に指定した文字列が含まれていた場合、その文字列の開始位置を整数の値で返します。“`ruby
str.index(検索したい文字列, [検索を開始する位置])
“`##解答
“`ruby
def count_code(str)
puts str.index(“code”, 0) + 1
end
“`##解説
indexメソッドは文字列の先頭を0から数えた数字を返すため、+1をしています。また、文字列の先頭から検索を開始する場合、第二引
Rails ルーティング
#Rails ルーティング設定
## ルート設定
rootを使用する“`ruby:Routes.rb
root to: “main#index”
“`
## 名前空間を使用する
名前空間(admin)のteamsコントローラを使用する場合“`ruby:Routes.rb
namespace :admin do
resources :teams
end
“`
form_forを使ったRails.fireの使い方
## form_forを使ったRails.fireの使い方
JS側からsubmitを行う方法として、Rails.fireを使う方法があります。
Rails.fireを使うとajax通信が可能になります。
form_forの中で、remote: trueを指定することによって、html.erbがコンパイルされた結果のhtmlに「data-remote=”true”」が記述される様になり、ajax通信が可能になります。– html.erb側
“`
<%= form_for hoge_model, url: '', html: { id:'hoge_form',method: put},remote: true do |f| %>
<%= f.text_field :name, placeholder: 'test' %>
<%= f.button id: 'hoge_submit' ,type:'button' %>
<% end %>
“`– js側
“`
import Rails from “@rails/ujs”;$(document).on (‘tu
【Rails × CircleCI】初心者がCI/CD設定で躓いたエラー集と解決法
railsでポートフォリオ作成している初心者の私がcircleCI導入で遭遇したエラー集とその対応をまとめました。
“`
#version
Ruby 3.0.2
Rails 6.0.4
“`# ① unable to parse yaml while parsing a block mapping
原因:ymlファイルの記法ミス
circle CIの設定関係なく、タブインデントを使用している等のymlファイル特有の文法に沿わない記述があると発生します。
解決法:
文法チェックのために毎回デプロイするのは面倒なのでデプロイ前の下記コマンドで文法チェックを行うことができます。“`
$ circleci config validate
Config file at .circleci/config.yml is valid.
#この表示が出れば文法ミスはないことが確認できます
“`# ②The following gems are missing
“`
[DEPRECATED] The `–path` flag is deprecated because i
[Ruby]ハッシュのアレコレ
学んだことのアウトプット
ハッシュを使ったコードを書きながら「あれ?どうやったっけ?」となったので復習しました###”ハッシュ”とは
「データ」とそれに対応する「名前」のセットを要素として持つ値。
データを`バリュー`、それに対応する名前を`キー`と呼ぶ。
配列と同じように、複数の値を持つことができるし、配列にハッシュ自体を入れ込むことも可能。“`ruby
#ハッシュの宣言
変数 = {}#下記2つは出力すると同じものが出力される
変数 = { キー1 => バリュー1, キー2 => バリュー2, キー3 => バリュー3 }
変数 = {キー1: バリュー1, キー2: バリュー2, キー3: バリュー3} #シンボルを使うとシンプルに書ける
“`##ハッシュに値を追加する
“`ruby
ハッシュ[追加するキー] = 値#例
teacher = { name: “Mike”, age: 25 }
teacher[:subject] = “English”puts teacher #=>{name: “Mike”, age: 25, subject:
memcachedの概要と動作確認
## はじめに
インターン先でMemcashedに触れる機会があったので、どんなものか調べてみました。
Memcashedについて様々な素晴らしい記事があり、それらを参考に体型立ててまとめたものなので引用が多くなっております。## memcachedとは
とてもわかりやすい記事があったので、そちらを引用させていただきます。>memcachedは高性能な分散メモリキャッシュサーバ。データベースへの問い合わせ結果を一時的にキャッシュすることで,データベースへのアクセス回数を減らし,動的なウェブアプリケーションの高速化やスケーラビリティの向上のために利用されている。
引用元:
[memcachedを知り尽くす ~第1回 memcachedの基本~](https://gihyo.jp/dev/feature/01/memcached/0001)## 導入方法
>参考:[macでmemcachedを導入する手順 – Qiita](https://qiita.com/makotok7/items/9998b15f79fc7a53af24)###インストール
“`shell:con
Cherry本の著者 伊藤さんによるRubyの正規表現のアウトプット①
#参考記事と書籍
https://qiita.com/jnchito/items/893c887fbf19e17d3ff9#正規表現とは
文字列をわかりやすく
[py2rb] lxml.etree
# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# lxml.etree (Python)
“`python
from lxml import etreeparser = etree.XMLParser(remove_comments=True, ns_clean=True)
tree = etree.parse(source, parser=parser)
“`
データをxml形式で取り扱いますので、外部ライブラリである`lxml`が使用されます。https://lxml.de/apidoc/lxml.etree.html
> classlxml.etree.XMLParser(self, encoding=None, attribute_defaults=False, dtd_validation=False, load_dtd=False, no_network=True, ns_clean=False, recover=False, schema: XMLSchema = None, huge_tree=False,
RailsのSTIで子クラスがfindに引っかからなくてハマった話
# 前提環境
“`
$ ruby -v
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x64-mingw32]
$ rails -v
Rails 7.0.1
“`# 問題
ツイッターのクローンアプリを学習用に作っていて、ツイート系のモデルが`Tweet < ApplicationRecord`、`NormalTweet < Tweet`、`Reply < NormalTweet`となる設計で実装しました。 ※Tweetはツイートの作成者`author`、NormalTweetはツイート内容`text`、Replyは返信先`reply_to`を持ちます。 それで開発中`NormalTweet.find()`にその子クラスである`Reply`が引っかるときと引っかからない時がある!(`Couldn't find NormalTweet with 'id'=n (ActiveRecord::RecordNotFound)`)という問題が発生。 # 原因 Rails(のデフォルトではdevelopment環境)では、クラスが使用さ
【Ruby】文字数を算出するプログラム count_hiメソッド
※初心者向け
※アウトプット練習の為
※学習の復習開発環境
rails 6.0.4.4
ruby 2.6.5##概要
対象となる文字列から特定の文字列の数を算出し、その数を出力するプログラムを実装##問題内容
以下の要件を満たすcount_hiメソッドを実装しましょう。・対象となる文字列の中から、”hi”という特定の文字列の数を取得すること
・上記で取得した数を出力すること**雛形**
“`ruby
def count_hi(str)
# 処理を記述
end# 呼び出し例(引数には対象となる文字列を指定します)
count_hi(‘abc hi ho’)
“`**出力例:**
count_hi(‘abc hi ho’) → 1
count_hi(‘ABChi hi’) → 2
count_hi(‘hihi’) → 2**ヒント**
**scanメソッド**を使用しましょう。**scanメソッド**
**scanメソッド**は、対象の要素から引数で指定した文字列を数え、配列として返すメソッドです。“`ruby
“foobarbazfo
【MinIO】RailsアプリケーションにS3互換ストレージ MinIO を導入してみる
# はじめに
プライベートでの共同開発において、「開発環境と本番環境の差異をできるだけ少なくしたい」という思いからローカルで動かせるS3互換ストレージを調べていました。業務で`fake-s3`というサービスを使用したことがありますが、MinIOというサービスも現場で使われている例を発見したのでそちらを導入してみました。# MinIOについて
MinIOとはAWS S3互換のオブジェクトストレージのことです。https://min.io/
* 特徴
* ローカルに仮想的な S3 環境を構築できる
* ローカルの仮想環境なので不用意にAPIを叩いてもお金も掛からない# シナリオ
簡単なアプリを作成した後、MinIOを導入し、投稿した画像がMinIOに格納されるかを確認してみます。### 1. アプリの土台を作成する
以下の機能をもつ簡易的なブログアプリを作成する。* 記事一覧機能
* 記事詳細機能
* 記事投稿機能#### 動作確認
MinIOを用いない状態で画像を投稿し、storageフォルダにファイルが格納されることを確認する### 2.
renderで部分テンプレートを呼び出す方法
#はじめに
この記事はプログラミング学習の備忘録です。今回はrenderを使って指定のビューファイルを呼び出す方法についてまとめます。
#viewでrenderメソッドを使う
まずviewでよく使われるrenderメソッドの用法は、部分テンプレートを呼び出す時です。部分テンプレートとは複数のviewファイルで使われるコードを切り出して、共通化するファイルのことです。
renderで部分テンプレートを呼び出すためには、まずは共通部分をまとめた部分テンプレートファイルを作ります。
この時に気をつけることは、ファイル名の先頭にアンダーバーをつけて
**「_tweet.html.erb」**のような形にすることです。次に部分テンプレートを呼び出します。呼び出し方は主に、
①部分テンプレートをそのまま呼び出す場合
②変数を渡す場合
の2つがあります。順番に説明します。
#部分テンプレートをそのまま呼び出す
例えばformを作る部分テンプレートには変数を渡さず、そのまま呼び出されます。
まずは「_form.html.erb」というファイルを作り、“`new.html.erb
<
stripメソッドとそれに関連するメソッドのまとめ
rubysilverを勉強するためのサイトのRexを勉強してわからなかったメソッドがあったので備忘録として残しておきます
https://rex.libertyfish.co.jp/##Stripメソッド
stripという英語の意味は、「剥ぎ取る」という意味です
結論からいうと、文字列先頭と末尾の空白文字を全て取り除いた文字列を生成して返すメソッドなんです。
[ruby 公式ドキュメントより](https://docs.ruby-lang.org/ja/latest/method/String/i/strip.html)このリファレンスに書いてあるのですが、「空白文字の定義は ” \t\r\n\f\v”」と書いてあるんです。
そこで思ったのが、「\\t\r\n\f\v」ってなに?って思ったんですよね。
(この文字列の中にスペースも入ってるのでご注意を)ここで大事になるのが、正規表現についての知識が必要になるんですよね。
よく調べたら、これがrubyの[公式ドキュメント](https://docs.ruby-lang.org/ja/latest/doc/spec=2freg