Ruby関連のことを調べてみた2022年01月24日

Ruby関連のことを調べてみた2022年01月24日

[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?
#=> true

5.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

元記事を表示

OTHERカテゴリの最新記事