- 1. [py2rb] partition, rpartition
- 2. Railsにおけるto_jsonのオプション
- 3. Ruby環境からPythonスクリプトを叩いてデータを得るまで
- 4. 【Ruby】偶数値の取得
- 5. アプリを作る 基本的ログイン機構
- 6. アプリを作る ユーザー登録
- 7. Railsで全てのレコードを検索する
- 8. ruby on rails アセットパイプライン
- 9. 【Rails】bulletで検知できないN+1を解消する part1
- 10. Ruby on Railsでアプリを作成してみた【1】【recipegram】
- 11. Rails 複数 画像投稿 Cloudinary CarrierWave
- 12. form_withを使ったRails.fireの使い方
- 13. FactoryBot(Rails)のtraitとは
- 14. Coudn’t find Tweet with ‘id’=index [rails エラー error]
- 15. Tempfile オブジェクトから Content-Type(mime type) を取得する方法
- 16. アプリを作る ユーザーのモデルを作成する
- 17. アプリを作る その2
- 18. 【Ruby】検索問題
- 19. Rails ルーティング
- 20. form_forを使ったRails.fireの使い方
[py2rb] partition, rpartition
# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# partition, rpartition (Python)
“`python
s = ‘a,b,c’print(s.partition(‘,’))
print(s.rpartition(‘,’))
print(s.partition(‘/’))
print(s.rpartition(‘/’))
print(s.partition(”))
print(s.rpartition(”))(‘a’, ‘,’, ‘b,c’)
(‘a,b’, ‘,’, ‘c’)
(‘a,b,c’, ”, ”)
(”, ”, ‘a,b,c’)
ValueError: empty separator
“`
https://docs.python.org/ja/3.7/library/stdtypes.html#str.partition文字列を区切りますが、空文字の場合エラーとなります。
# partition, rpartition (Ruby)
“`ruby
s = ‘a,b,c’
Railsにおけるto_jsonのオプション
## 概要
今回は先日改めて学んだto_jsonのオプションについてアウトプットしたいと思います。
Railsのコントローラーなどでよく使用します。## 環境
ruby: ‘3.0.1’
rails: ‘6.1.4.1’## to_jsonについて
### to_jsonとは
`to_json`とはオブジェクトをJSON形式に変換してくれるメソッドです。“`ruby
user = { id: 1, name: ‘user1’, age: 22 }user.to_json #=> “{ \”id\”:1, \”name\”:\”user1\”, \”age\”:22 }”
“`
なお上記user定義はこの後の説明で使用していきます。### よく使用するオプション各種
#### 1. include
`include`は__関連付けされているテーブルのカラムも一緒に取得__できるオプションです。
例えば、`user`を取得するときにその`user`が投稿した`post`データも一緒に取得したい場合などに使用します。“`ruby
class User < App
Ruby環境からPythonスクリプトを叩いてデータを得るまで
こんにちは。
Rubyを使っているとき、RubyからPythonスクリプトを叩いて、その結果をRubyで表示することが出来たらいいなと考えました。
想定するケース例としては、**RailsのバックエンドでPythonの機械学習コードを実行したい**といったものになります。今回のブログでは、`Ruby環境からPythonスクリプトを叩いてデータを得るまで`について述べていきたいと思います。
このブログで得ることができる情報は以下になります。
>・Ruby環境でPythonスクリプトを実行したいときの手順
・Flaskの簡単な使い方
・RubyのNet::HTTPクラスの簡単な使い方#実装した手順について簡単に概要を。
私が実装した方法は以下になります。
>**1. Flaskを用いて、PythonスクリプトをAPI化する
2. API化したものをローカル上で実行(Run)する
3. RubyのNet::HTTPクラスを用いてローカル上のAPIを叩く**![image.png](https://qiita-image-store.s3.ap-northeast-1.ama
【Ruby】偶数値の取得
※初心者向け
※アウトプット練習の為
※学習の復習開発環境
rails 6.0.4.4
ruby 2.6.5##問題内容
配列にある値の中から偶数の数をカウントして出力するメソッドを作りましょう。**出力例:**
count_evens([2, 1, 2, 3, 4]) → 3
count_evens([1, 3, 5]) → 0**ヒント**
even?というメソッドを使いましょう。**even?メソッド**
Rubyが元々用意している、対象の数値が偶数かどうかを判断するメソッドです。
対象の要素の値が偶数であれば真を返し、そうでない場合は偽を返します。“`
10.even?
#=> true5.even?
#=> false
“`##解答
“`ruby
def count_evens(nums)
count = 0
nums.each do |num|
if num.even?
count += 1
end
end
puts count
end
“`##解説
配列の中の偶数の数を出
アプリを作る 基本的ログイン機構
###ログイン機能を作る
####そのためにコントローラを作る
“`rb
ubuntu:~/environment/my_app (basic-login) $ rails generate controller Sessions new
Running via Spring preloader in process 15621
create app/controllers/sessions_controller.rb
route get ‘sessions/new’
invoke erb
create app/views/sessions
create app/views/sessions/new.html.erb
invoke test_unit
create test/controllers/sessions_controller_test.rb
invoke helper
create app/helpers/sessions_h
アプリを作る ユーザー登録
##ユーザーを登録する
###ユーザーを表示させる####デバッグ情報を追加する
app/views/layouts/application.html.erb“`
.
.
.
<%= render 'layouts/header' %><%= yield %>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>
“`
####デバックの情報のCSSの表示
app/assets/stylesheets/custom.scss“`c
Railsで全てのレコードを検索する
##全てのテーブルの全てのレコードの中から特定の単語を検索する方法
以下のコードをコピーして、検索したい文字列を入力して、コンソールで実行するだけで検索できます。
“`search_word.rb
ActiveRecord::Base.connection.tables.each do |table|
model_name = “#{table.camelize.chop}”.constantize rescue next
model_name.column_names.each do |column_name|
if model_name.columns_hash[“#{column_name}”].type.to_s == (“string” || “text”)
pp table_model.where(“#{column_name} like ?”, ‘%ここに検索したい文字を入力%’) rescue next
end
end
end
“`##よくわかる解説
大まかな方針としては、“(モデル名).where(“カラム名
ruby on rails アセットパイプライン
## はじめに
ruby on rails チュートリアルを学習中
初学者## アセットパイプラインとは
簡単に言えば複数のファイルを一つにまとめるための機能
scssを最終的に1つのcssにまとめる等
今では多くの言語でファイルをバンドルしているが、ruby on railsにアセットパイプラインが追加されたのをきっかけに
多くの言語やFWで取り入れられたらしい。## Railsでのアセットパイプライン
**理解するべきこと3つ**– アセットディレクトリ
– マニフェストファイル
– プリプロセッサエンジン### アセットディレクトリ
アセット(画像やcss(scss))の置き場所
railsの場合`app/assets`に`stylesheetsやimagesディレクトリ`がある
`sample.svg`を保存する場合
`app/assets/images/sample.svg`となる
画像やcssの置き場所を固定することで、開発者間での違いをなくすことができ、開発効率や保守性を上げることができる### マニフェストファイル
静的ファイル(アセット)をどのよう
【Rails】bulletで検知できないN+1を解消する part1
#初めに
Railsのviewの表示速度の低下理由として、partialの使いすぎやN+1問題があります。
このN+1問題を検知するgemとして、有名なのがbulletです
ただし、全てのN+1を検知してくるわけではありせん###本記事について
bulletで検知できないN+1が発生した時の対処法を僕なりに書いた記事になっております。
間違ったことなどがあれば、ご指摘ください。#本文
###モデルの定義
まずは、モデルを定義します。
コーヒー豆(bean)とレビュー(review)が1対多で関連付けされています。
beanにはコーヒー豆の名前と国、説明のカラムが存在しています。
reviewにはレビュー内容と香り・甘味・苦味・コク・酸味のカラムが設定されています
香り・甘味・苦味・コク・酸味は1から5の数字で評価していただく形になっています。“`ruby:bean.rb
# Table name: beans
#
# id :bigint not null, primary key
# name :strin
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` が依存し
アプリを作る ユーザーのモデルを作成する
###Userモデルを生成する
“`rb
ubuntu:~/environment/my_app (modeling-users) $ rails generate model User name:string email:string
Running via Spring preloader in process 3689
invoke active_record
create db/migrate/*********_create_users.rb
# Usersテーブルの詳細を設定させるファイル
create app/models/user.rb
# useデータモデルの使用を書く
invoke test_unit
create test/models/user_test.rb
# そのテストファイル
create test/fixtures/users.yml
# テストユーザーのファイル
“`###(user
アプリを作る その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