- 1. 1.そもそもオブジェクトとは?
- 1.1. ruby on rails インストール 時の注意点 自分用
- 1.2. WindowsにRedmine5.0.1を手動インストールする方法
- 1.3. 【Rails】ページネーションGem「kaminari」を実装をした記録②(CSSやデザイン適用)
- 1.4. 【Rails】ページネーションGem「kaminari」を実装をした記録①(導入〜表示)
- 1.5. [Rails] Formオブジェクトに使えるmodule
- 1.6. [初心者向け]Rubyを手っ取り早く解説
- 1.7. Rubyメソッド逆引きメモ
- 1.8. 【rails】投稿機能の項目追加
- 1.9. 【Ruby】二項係数(nCr)の素数modを求めるコード
- 1.10. 【モンキーパッチ】管理画面生成gemのAdministrateで、NameError uninitialized constant
- 1.11. Ruby の例外の伝播
- 1.12. フルスタックエンジニアへの道 part 2 ~Rails 7 × Dockerの環境構築 2
- 1.13. SlimとSassの静的サイトジェネレーター、RTramを作ったよ
RubocopでRails/Presence: Useと指摘を受ける
RuboCopで下記の指摘を受けました。
“`
Rails/Presence: Use self.カラム名.presence || “hogehoge” instead of self.カラム名.present? ? self.カラム名: “hogehoge”.
“`
“`rb
# 指摘を受けたソース
self.カラム名.present? ? self.カラム名: “hogehoge”
“`
どうやら、presentメソッドではなく、
presenceメソッドというものを使いなさいと指摘されているようです。下記記事によると、
presenceメソッドは、
オブジェクトが存在すればそのオブジェクトを返し、
存在しなければnilを返したい場合にとても便利なショートカット
…とのこと。https://techracho.bpsinc.jp/hachi8833/2021_02_26/62326
カラムが存在しない場合は、”hogehoge”という文言を返したいので、
下記ソースに修正。
二回カラム名を書く以前のソースよりシンプルになりました。
“`rb
self.カラム名
URI.encodeでundefined method ‘gsub’ for nil:NilClass
# この記事のまとめ
– `URI.encode`メソッドの引数にnil渡すと`undefined method ‘gsub’ for nil:NilClass` エラーが出る
– `URI.encode`ではnil避けがされない
– `URI.encode`自体が非推奨なので`URI.encode_www_form_component`を使おう# 実際に起こった問題
– `URI.encode`メソッドで、URLをエンコーディングしようとした
– しかし500エラーが発生した。
– スタックトレース見ると、`undefined method ‘gsub’ for nil:NilClass` が出ていた該当コード:
“`ruby
url = post.url
post.url #nilURI.encode(post.url) #undefined method ‘gsub’ for nil:NilClass
“`# 対応
– `URI.encode_www_from_component`を代わりに使おう
– 実は`URI.encode`自体もう使うな
RubyでPythonのようにfor i in range(n)する
# 普通のコード
rubyの普通のrangeオブジェクトだとこうです
“`ruby
(0…n).each do |i|
puts i
end
“`
for文で書き直すと以下。
“`ruby
for i in 0…n
puts i
end
“`
# range関数
しかし、私はPythonのようにrangeを書きたいと思いました。
そこで、以下の関数を定義します。
“`ruby
def range(l, r=nil, s=nil)
return 0…l unless r
return l…r unless s
(l…r).step(s)
end
“`
`range(l)`のとき、`0…l`を返す。
`range(l, r)`のとき、`l…r`を返す。
`range(l, r, s)`のとき、`(l…r).step(s)`を返す。使い方は以下です。※コロンは不必要、endは必要です。
“`ruby
for i in range(10, 20, 2)
puts i
end
#=> 10
#=> 12
#=> 14
#=
rbenvで指定してるrubyのversionと、実際のversionが違う時の対処
# rbenvで指定してるrubyのversionと、実際のversionが違う
versionがなぜかあっていない。実際のrubyのversionが更新されない。。
OS: Mac
SHELL: zsh
“`
$ ruby -v
ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.x86_64-darwin21]$ rbenv versions
system
2.6.9
3.1.1
* 3.1.2 (set by /Users/<ホームディレクトリ>/.rbenv/version)
“`# よくわからんけどrbenv initをする
すると、eval “$(rbenv init – zsh)”を~/.zshrcに追加すれば、rbenvを読み込んでくれるらしいことがわかる。
“`
$ rbenv init
# Load rbenv automatically by appending
# the following to ~/.zshrc:eval “$(rbenv init – zsh)”
“
crystal の AtCoder における pow の使用(健忘録)
# はじめに
https://qiita.com/Itoi/items/aad133bcd74e147c9e16@Itoi さんの記事を拝見して、`Ruby`に`Integer#pow`があることを思い出しました。
しかしながら、`crystal`には**mod**する**pow**が無い様です。
とりあえず、自作関数を作ります。
# 自作関数(Ruby)
“`rb
def modinv(n, mod)
n.pow(mod – 2, mod)
end
“`
組み込み関数がありますので、シンプルです。
# 自作関数(crystal)
“`cr
def pow(v, p, mod)
ret = 1i64
while p > 0
if (p & 1i64) != 0
ret *= v
ret %= mod
end
v *= v
v %= mod
p >>= 1
end
ret
end
def modinv(n, mod)
pow(n, mod – 2, mod)
end
“`
自作と言いまして
Rubyでシーザー暗号のプログラムを実装
Rubyでシーザー暗号のプログラムを作りました。
:::note warn
補足
– まだ暗号化するだけの処理です。
– 英大文字のみ対応です。
– スペースなどは考慮していません。
:::#### シーザー暗号とは
平文の各文字を辞書順にずらして暗号文にする暗号です。https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%B6%E3%83%BC%E6%9A%97%E5%8F%B7
#### プログラム
“`ruby
def caesar_cipher(string = “ABC”, shift = 3)
charArray = string.chars.map(&:ord)charArray.map do |char|
if (char + shift) < 91 (char + shift).chr else (char - 26).chr end end.join end puts caesar_cipher ``` #
オブジェクト指向とは…?
Ruby学習中に聞いたオブジェクトという言葉がありますが
Rubyという言語自体がオブジェクト指向と呼ばれているらしいです。参考資料を見ても、ふわふわとした概念だとあるので、
自分なりにまとめてみました。[1.そもそもオブジェクトとは?](#1-そもそもオブジェクトとは?)
[2.Railsでのオブジェクト指向](#2-Railsでのオブジェクト指向)
[3.現状の認識](#3-現状の認識)
[4.参考文献](#4-参考文献)1.そもそもオブジェクトとは?
ここでいうオブジェクトとは、
『クラス』や『メソッド』を『モノ』として
置き換えている?ような印象でした。![スクリーンショット 2022-05-25 23.48.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2687611/3f857595-2eeb-a939-bf8a-f1810e5df602.png)
クラス(モruby on rails インストール 時の注意点 自分用
https://rubyinstaller.org/downloads/
https://qiita.com/OKIDOKI000/items/25c37dd354aa471f5690
https://qiita.com/za_spa/items/6ca0d01e1156264742ab
https://udon.little-pear.net/msys2-pacman-pgp-update/
https://www.msys2.org/
https://teratail.com/questions/338070?sort=3
https://sappolog.hatenablog.com/entry/programming/ruby/devkit-install
WindowsにRedmine5.0.1を手動インストールする方法
# はじめに
RubyとかRailsとか一切触ったことがなかったのでかなり苦労したが、なんとかインストールできたので備忘録をかねて記事に残しておく。# 経緯
Bitnami版を利用すれば手軽にインストールできるのは知っていたのだが、最新版のRubyを利用したかったため、手動でのインストールに挑戦。
※手動インストールのやり方を知っておけば、社内利用においてもソフトウェア脆弱性対応とかにもわりと対応できますし(というかこれが本当の経緯)# インストール環境
| OS | Windows Server 2019 |
|:-|:-|
| Redmine | 5.0.1 |
| DB | MariaDB 10.8.3 |
| Ruby | 3.1.2 |
| Rails | 6.1.6 |
| Webサーバ | Thin |※Railsのバージョンは意識していない(勝手に6.1.6が入っていただけ)
# 前提
インターネットに接続できる環境でないとインストールできません。
プロキシサーバ、セキュリティソフトなどの影響もあるとインストールできないこともあるかと。# 手順
##
【Rails】ページネーションGem「kaminari」を実装をした記録②(CSSやデザイン適用)
### 初めに
画像投稿アプリを作成している中で、投稿が増えてきたため実装しました。
その過程を備忘録として投稿いたします。ページネーションGem「kaminari」の導入〜表示の方法は前回の記事でご紹介しています。
今回はデザインを適用させる過程等を記事にまとめました。
### HTML ・ CSSの適用
##### 完成図
![スクリーンショット 2022-05-25 12.39.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655769/d3641f38-d5ef-9ef8-3d32-c82150108285.png)
hoverで動きを出した動画
https://gyazo.com/ad3cf10a453b9cf1a76b3d08996cb127
—
ページネーションをつけたいビューに以下を追加して作成しました。
【Rails】ページネーションGem「kaminari」を実装をした記録①(導入〜表示)
### 初めに
画像投稿アプリを作成している中で、投稿が増えてきたため実装しました。
その過程を備忘録として投稿いたします。### kaminariとは?
ページネーションを簡単に実装するためのGemです。
ブログでよく見かける、ページを分割するものです。公式Git Hubに詳しい使い方が書いてありましたので、こちらも参考にしながら実装しています。
https://github.com/kaminari/kaminari
—
今回は以下のようなものを作成しました。
![スクリーンショット 2022-05-25 12.39.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655769/d3641f38-d5ef-9ef8-3d32-c82150108285.png)
こちらの記事では導入方法〜表示方法を紹介しています。
CSSの適用だけ見たい方は[Rails] Formオブジェクトに使えるmodule## 概要
Formオブジェクトなどを実装する場合、`ActiveModel::Model`をincludeしたPOROクラスを実装することがあると思います。
この記事ではその際に、追加のmoduleを使ってできることをまとめてみました。## 環境
Rails: 7.0.3## ActiveModel::API
まずはこの`ActiveModel::API`をincludeすることから始まります。
これにより、以下のような機能が利用できます。
– `form_with`や`render`などのAction Viewのヘルパーメソッド
– 値のvalidation### tips
– 値を上書きしたい場合、対象のattributeは`attr_reader`にしておき、`#{attr_name}=`のsetterを定義します。“`ruby:email_contact.rb
class EmailContact
include ActiveModel::Model# 値を変更したい場合、ここはattr_readerだけにして、setterメソッドを定義する
[初心者向け]Rubyを手っ取り早く解説
# 導入
Rubyのインストールは事前に行ってください。
Rubyのコードの実行の仕方も他で検索してください。専門用語は極力使わないようにしています。
# 解説
## 表示
“`ruby
puts “Hello World!”
“`
`puts`の後に表示したい文字を書くと、表示されます。
表示させるような文字は、基本的に、`”`で囲みます。
“`ruby
puts “Hello World!” #=> Hello World!
“`
`#`以降はコメントになります。ここに何を書いても、プログラムの実行には影響しません。
以下読みやすいように、`#=>`の後に、`puts`で何が表示されるのかを書くことにします。## 計算
“`ruby
puts 9 + 3 #=> 12
puts 9 – 3 #=> 6
puts 9 * 4 #=> 36
puts 9 / 4 #=> 2
puts 9 % 4 #=> 1
“`
上から順に、「たす、ひく、かける、わる、あまり」です。
数字の計算ができます。(数字は`”`で囲みません。)
## 変数
“`ruby
a = 3
puRubyメソッド逆引きメモ
Rubyにおける逆引きメモです。「やりたいこと→メソッド」という形にしています。項目ごとに公式ドキュメントへのリンクを付けてますので合わせて参考にしてください。
:::note info
現状は項目を羅列しているだけなので読みづらいかもしれません。
:::# オブジェクト調査係
サンプル用コード
“`ruby
class User
def initialize()
@name = “bob”
end
enduser = User.new
“`##### オブジェクトが持つインスタンス変数名を調べる[^1]
“`ruby
p user.instance_variables
#=> [:@name]
“`
– 変数名をシンボルの配列として返します。
– 初期化していない変数は返されません。##### オブジェクトのインスタンス変数の値を調べる[^2]
“`ruby
p user.instance_variable_get(“@name”)
#=> “bob”
“`
– 引数にはシンボルも使えます。`(:@name)`【rails】投稿機能の項目追加
# やること
railsアプリケーションで投稿機能の投稿フォームの項目を追加してみた!# 現状こんな感じ
“`html:new.html.erb<%= form_for @post do |f| %>
<%= f.label :body %>
<%= f.text_field :body, size:140, required:true %>
<%= f.submit "送信" %>
<% end %>
<%= link_to "投稿一覧", posts_path %>“`
`required:true`は必須回答という意味です!
“`ruby:posts_controller.rb
class PostsController < ApplicationController # 省略 def new @post = Post.new end def create【Ruby】二項係数(nCr)の素数modを求めるコード
# 結論
“`Ruby:Ruby
# r<=0の挙動には注意 def nCrMod(n, r, mod) numerator = ((n - r + 1)..n).inject { |result, item| result * item % mod } # 分子 denominator = (1..r).inject { |result, item| result * item % mod } # 分母 puts numerator * (denominator.pow((mod - 2), mod)) end ``` 急ぐ方が多いと思うので始めに持ってきました。 このコードに至る経緯や解説は下に書いていきます。 # はじめに はじめまして、糸井と申します。 2022年4月に友人と競プロを始めてハマっています! 言語はRubyです。競プロで高みを目指すということも目標ですが、Rubyの経験を積むためにC++ではなくRubyを使っています。(競プロで高みを目指すだけなら、間違いなくC++を覚えた方がいいですね) 今回はAtCoderでたまに見るnCrの求め方と、それの【モンキーパッチ】管理画面生成gemのAdministrateで、NameError uninitialized constant
問題
–
Administrate gem
`0.16.0`コントローラー
`app/controllers/admin/students/users_controller.rb`モデル
`app/models/students/user.rb`“`
NameError: uninitialized constant Student::User
File “/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/inflector/methods.rb”, line 284, in const_get
File “/app/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/inflector/methods.rb”, line 284, in block in constantize
File “/app/vendor/bundle/ruby/2.6.0/gems/acRuby の例外の伝播
いつも忘れるので。
“`ruby
def method1
method2
rescue => e
p “rescued in method1 #{e.message}”
enddef method2
if false
p ‘success’
else
raise “raised in method2”
end
endmethod1
# => “rescued in method1 raised in method2”
“`フルスタックエンジニアへの道 part 2 ~Rails 7 × Dockerの環境構築 2
### 前回: 個人開発をやる目的とか、何をするかなどはこちらから
[https://qiita.com/Terao-Takumi/items/f33393f7e99d40d7e4bb](https://qiita.com/Terao-Takumi/items/f33393f7e99d40d7e4bb)
### 今回のゴール: Docker上に起動したMySQLとRailsを接続し、rails sする。
# dockerまわりの設定
Dockerfile: 最後にこれを足す
“`bash
$ CMD [“mysqld”] # mysqlを起動
“`docker-compose.yml
“`bash
db-sloth:
image: mysql:5.7
platform: linux/x86_64 # M1 Macだと動かないのでplatformを指定
volumes:
– ./db/development/tools:/docker-entrypoint-initdb.d # 初回データ実行
– ./db/develSlimとSassの静的サイトジェネレーター、RTramを作ったよ
RTram(あーるとらむ)はLPなどの静的なWebページ作成で、Ruby on Railsのエンジニアに馴染み深いSlimとSassを使いやすくするためのツールです。
https://github.com/rinkei/rtram
Rubyの構文とシンプルな記法でHTMLを表現できるSlimと、CSSをメンテナンスしやすく書けるSassを使って、高速にWebページを作成することができます。インストールは次の通りです。
“`
$ gem install rtram
“`RTramはSlimとSassをHTMLとCSSに変換しながらlocalhostでホスティングするサーバーを提供します。
RTramのバージョン1.0.0ではプロジェクトディレクトリを作るコマンドとサーバーを起動するコマンドだけがあります。
プロジェクトディレクトリは次のような構成です。– `slim`: 変換の対象となる.slimファイルを置くディレクトリ
– `sass`: 変換の対象となる.scss、.sassファイルを置くディレクトリ
– `output`: Slimから変換されたHTMLが出力さ関連する記事
OTHERカテゴリの最新記事
-
- 2024.09.19
JavaScript関連のことを調べてみた
-
- 2024.09.19
JAVA関連のことを調べてみた
-
- 2024.09.19
iOS関連のことを調べてみた
-
- 2024.09.19
Rails関連のことを調べてみた
-
- 2024.09.19
Lambda関連のことを調べてみた
-
- 2024.09.19
Python関連のことを調べてみた