20220117のRubyに関する記事は11件です。

整数のそれぞれの桁の数字を求める

学習したことのアウトプットとして 勉強をしていると「3桁のそれぞれの桁の数字を足すプログラムの作成」というものがあった。 今まで桁を取り出す方法とか考えたことがなく、勉強になったため記事にしてみる。 それぞれの桁の数字の取り出し方 num = 3456 # 千の位 result_1000 = (num / 1000) % 10 # 百の位 result_100 = (num / 100) % 10 # 十の位 result_10 = (num / 10) % 10 # 一の位 result_1 = (num / 1) % 10 puts result_1000 # => 3 puts result_100 # => 4 puts result_10 # => 5 puts result_1 # => 6 ちなみに 一万の位の場合は (num/10000) % 10 で取り出すことが可能。 以上。法則は分かりやすいので特別難しいことはないかと。 追記(20230118) コメントで教えていただいたことを追記しときます。 (教えていただき有難うございます!) digitsメソッド 表記した数値を配列で返してくれる #整数を定義 irb(main):001:0> num = 123456 => 123456 #配列として帰ってくる irb(main):002:0> num.digits => [6, 5, 4, 3, 2, 1] 非負整数でなければいけない。非負整数でない場合はエラーが発生する。 文字列として考える to_sメソッドを使用する。to_sメソッドは文字列以外のオブジェクトを文字列に変換するメソッド。 num = 1234 #頭からn桁目を指定して取り出せる puts num.to_s[0] #1 puts num.to_s[1] #2 puts num.to_s[2] #3 puts num.to_s[3] #4 #末尾からn桁目みたいな書き方をする場合 puts num.to_s[-1] #4 puts num.to_s[-2] #3   こうしてみるとコードの書き方や考え方ってたくさんあるなぁと… そこが難しくもあるし、奥深いなと感じた。 ※補足等ありましたらコメントいただけると幸いです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】「rails g controller コントローラー名」を実行すると...?

「rails g controller コントローラー名」を実行すると...? ・コントローラー名(複数形)+controllerという名前のcontrollerが生成される。 ・viewsフォルダの中にコントローラー名と同名のフォルダが作られる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Twitterのシェアボタンを実装

目的 今回、以下の画像の下の方にあるTwitterシェアボタンの実装をどうやったかご紹介します。 同じように実装したいと思っている人のお役に立てれば嬉しいです。 Twitterのボタンをクリックすると別タブでTwitterのページが表示され以下の画像のように 文字やシェアしたいURLが表示されツイートできる状態になります。 このようにシェアしたいページをボタンを押せばシェアできるようになっています。 実装 結論から言うと以下のように実装しています 実装したいviewの中に 例>show.html.erb <%= link_to image_tag('twitterアイコン', class: :twitter_icon), "https://twitter.com/share?url=#{request.url} & text=#{@artist.name} のDIG ARTISTページ", data: { show_count: false }, title: 'Twitter', target: '_blank', rel: "noopener noreferrer" %> 簡単に言うと 画像にTwitterシェアのリンクを埋め込んでいます。 画像 まずボタンにしたい画像(ファイル名はなんでも大丈夫です)を app/assets/imagesに入れ <%= link_to image_tag('画像のファイル名') %> で画像を呼び出してます。 URL <%= "https://twitter.com/share?url=#{request.url}" %> でシェアしたいページを指定しています。 #{requests.url}で現在表示しているURLを入れていますが。 シェアしたいページが決まっているのであればそのページのURLを入れれば そのシェアしたいページのURLがシェア出来るようになります。 text textは入れても入れなくてもどちらでも大丈夫です。 URLの後に <%= "https://twitter.com/share?url=#{request.url} & text=入れたい文章” %> で好きな文章を入れる事ができます。 ハッシュタグ 今回の実装には入れていませんがハッシュタグも追加する事ができます。 URLの後に <%= "https://twitter.com/share?url=#{request.url} & hashtags=好きなハッシュタグ" %> 今回の実装に追加するとこんな感じです。 <%= link_to image_tag('twitterアイコン', class: :twitter_icon), "https://twitter.com/share?url=#{request.url} & text=#{@artist.name}のDIG ARTISTページ & hashtags=バンド", data: { show_count: false }, title: 'Twitter', target: '_blank', rel: "noopener noreferrer" %> 上の画像のようにハッシュタグが追加されました。 その他 target: '_blank' これを記述することで別タブで表示しています。 これを外すと同じタブで表示されます。 rel: "noopener noreferrer" こちらは外部サイトへのリンクのためセキュリティの観点から記述してます。 以下の記事参照 まとめ Twitterシェアボタンを実装したいviewに 〇〇.html.erb (テキストあり、ハッシュタグあり) <%= link_to image_tag('画像のファイル名', class: :クラス名), "https://twitter.com/share?url=#{request.url} & text=シェア時に入れたい文章 & hashtags=シェア時に入れたいハッシュタグ", data: { show_count: false }, title: 'Twitter', target: '_blank', rel: "noopener noreferrer" %> (テキストあり、ハッシュタグなし) <%= link_to image_tag('画像のファイル名', class: :クラス名), "https://twitter.com/share?url=#{request.url} & text=シェア時に入れたい文章", data: { show_count: false }, title: 'Twitter', target: '_blank', rel: "noopener noreferrer" %> (テキストなし、ハッシュタグなし) <%= link_to image_tag('画像のファイル名', class: :クラス名), "https://twitter.com/share?url=#{request.url} ", data: { show_count: false }, title: 'Twitter', target: '_blank', rel: "noopener noreferrer" %> 以上のようになります。 ぜひ試してみてください!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】The asset "application.css" is not present in the asset pipeline. の解消方法

railsアプリケーションの開発を行っていたら、アクセス時に以下の画面が出てきた。 (関係ないかもですが私はRspecを導入したら発生しました。) 環境 ruby 2.7.5 Ruby on Rails 6.1.4.4 Docker 20.10.11 / docker-compose 2.2.1 PostgreSQL 14.1 原因 log/production.logを確認したところ、以下のエラーが出ていた。 ActionView::Template::Error (The asset "application.css" is not present in the asset pipeline.): 解決策 config/environments/production.rbを以下のように修正したところ解消された。 - config.assets.compile = false + config.assets.compile = true
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

debug.gemでDocker上のRubyをデバッグしたい

やりたいこと ruby/debug: Debugging functionality for Ruby を使って、Dockerコンテナ上で起動したプログラムをデバッグする 参考 Ruby 3.1 の debug.gem を自慢したい - クックパッド開発者ブログ 方法 各環境で下のようなコマンドを実行する。 このとき、利用したいコンテナ側のポートを公開しておく。 # コンテナ側 $ rdbg -O --host=0.0.0.0 --port={任意のポート} main.rb # ホスト側 $ rdbg -A localhost {任意のポート} サンプル 準備 # 構成 $ tree app app └── main.rb main.rb a = 1 b = 2 puts a puts b c = a + b puts c c += 3 puts c 検証 コンテナ側 # コンテナを起動 $ docker run -it -p 1234:1234 -v $PWD/app:/app --rm ruby:3.0.3-bullseye /bin/bash # コンテナ内 ## debugをインストール $ gem install debug ## debugの起動 $ cd /app $ rdbg -O --host=0.0.0.0 --port=1234 main.rb DEBUGGER: Debugger can attach via TCP/IP (0.0.0.0:1234) DEBUGGER: wait for debugger connection... DEBUGGER: Connected. 1 2 3 6 DEBUGGER: Disconnected. ホスト側 $ rdbg -A localhost 1234 [1, 8] in main.rb => 1| a = 1 2| b = 2 3| puts a 4| puts b 5| c = a + b 6| puts c 7| c += 3 8| puts c =>#0 <main> at main.rb:1
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Ruby】eachの入れ子

※初心者向け ※アウトプット練習の為 開発環境 rails 6.0.4.4 ruby 2.6.5 問題内容 以下のように、果物の名前と値段が入った配列があります。 この配列を用いて、果物の名前とそれぞれの合計額が出力される コードを記述してください。 fruits_price = [["apple", [200, 250, 220]], ["orange", [100, 120, 80]], ["melon", [1200, 1500]]] (出力) appleの合計金額は670円です orangeの合計金額は300円です melonの合計金額は2700円です 解答 fruits_price = [["apple", [200, 250, 220]], ["orange", [100, 120, 80]], ["melon", [1200, 1500]]] fruits_price.each do |fruit| sum = 0 fruit[1].each do |price| sum += price end puts "#{fruit[0]}の合計金額は#{sum}円です" end 解説 最初に、3行目でfruits_priceから["apple", [200, 250, 220]]という値を取り出し、 変数fruitに代入します。その後4行目〜7行目で、fruitの1番目の値[200, 250, 220] から値を1つずつ取り出して、自己代入しながらsumを出力します。 丁寧に見ると以下のようになります。 # 1回目 sum = 0 #sum += priceはsum = sum + priceと解釈できる sum = 0 + 200 # 返り値 sum = 200 #2回目 #sumは1回目の200という値が返されます sum = 200 sum = 200 + 250 sum = 450 #3回目 #sumは2回目の450という値が返されます sum = 450 sum = 450 + 220 sum = 670 この結果、appleの合計金額は670円ですと出力されるようになります。この作業を残り2つorange、melonでも繰り返します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【書評】Ruby初学者がプロを目指す人のためのRuby入門改訂第2版を読んで学んだこと

はじめに 久しぶりの投稿になります。Tassyです。 この度、「プロを目指すための人のRuby入門 改訂第2版」を読ませていただきました。 https://blog.jnito.com/entry/2021/11/11/082704 まさか、当選するとは!!と言う気持ちと感謝の気持ちでいっぱいです。 プログラミング歴 受託開発企業で1年3ヶ月働いている 基本的にPHP(Laravel)で実装することが多い RubyはProgateで一通り触ったことがあるくらい 実際にRuby(Ruby on Rails)を使ってアプリを開発したことはない Rubyについてはど素人です。 学べたこと Rubyの基本構文(ハッシュ、ブロックetc) オブジェクト指向プログラミングとは テスト駆動開発の実践 正規表現について クラスについて yeild、Procについて パターンマッチについて Rubyの基本的な構文を学べるのはもちろんのこと、実際にirbを使って手を動かしながらコードを確認できるので、楽しい。そう、Rubyを書くのは楽しいです。 各章ごとに何を学んでほしいのか書いてあるので、要点を掴みながら読み進めることができます。 何がよかったか Ruby初学者の私でしたが、PHPやJavaScriptは少し書ける程度です。 そのため、他言語との比較を行いながらRubyの基礎を学ぶことができたのは非常に良かったなと思います。 また、この機能はどのように使えるのかというユースケースも提示されているので、イメージがつきやすいです。 聞いたことがあるような単語についても、説明が載ってあり、さらに詳細に学んでいきたい場合のおすすめのサイトや書籍も載っているという、ほんとに痒いところに手が届くし、痒いと気づいてなかったところにも手が届いちゃう本です。 どんな人に勧めたいか 完全な初学者という方ではなく、Rubyを触って半年くらいの方や、 他言語で開発をしたことがあるけど、Rubyを触ったことがなくて不安だなと思う方に、ぜひ手にとっていただきたいです! どう活かしていくか 私自身、現在Railsの保守案件に携わらせてもらっています。 Railsもキャッチアップが足りない状態ですが、この本のおかげでブーストをかけた状態で学んでいくことができそうです。 何度も読み返したい 一回深く読むより、何度も何度も読むことでプロに近づいていける本なのかなと思います。 実はまだ理解できていない点がいくつかあるのですが、本を読む際のポイントとして「知のインデックス」を貼るくらいの感覚で読むといいと本書にも書かれていました。 実案件で頭を悩ませた際は、本書を手に取り、何度も読み返していきたいと思います。 最後に 本書を送っていただいた@jnchito(伊藤 淳一)様、本当にありがとうございました! 気付けば、Rubyの魅力や書き心地に惚れてしまいました。 僕自身も立派な「Rubyist」となれるよう、Rubyに貢献していきます。 ぜひ、皆様も手にとっていただけますと幸いです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【シンボルについて】「:hoge」だったり「 hoge:」だったり【ややこしいから整理した】

# 普通のハッシュ   (ハッシュの値の呼び方は、  hash[“key1”] ) hash = {“key1” => value1, “key2” => value2} # 前置コロンを使う    (ハッシュの値の呼び方は、 hash[:key1] ) hash = {:key1 => value1, :key2 => value2} # 後置コロンを使う  (ハッシュの値の呼び方は、 hash[:key1] ) hash = {key1: value1, key2: value2} 普通のハッシュ キー名を文字列で指定して、「=>」でつないでキーに対応する値を記載します。 ハッシュの値を呼ぶ時は、キー名の文字列を指定します。 前置コロン(シンボル)を使う まず、コロンをキー名の前に書く前置コロンは、シンボルを表します。 シンボルとは、Rubyのオブジェクトのひとつの種類です。文字列の代わりに使うこともできますが、必ずしも文字列と同じ挙動をするわけではなく別物です。 ハッシュでは、キー名指定の部分をシンボルで置き換えることができます。「“key1”」の部分が「:key1」となります。文字列ではなくシンボルなので、クォーテーションはつけません。キー名に対応する値の記載方法は前項のものと同じで「=>」でつないで指定します。 ハッシュの値を呼ぶ時は、シンボルで指定します。 後置コロンを使う(シンボル指定で=>を省略) コロンをキー名の後ろに書く後置コロンは、キー名をシンボルにして=>を省略できる書き方です。 「:key1 => 」という部分が、「key1: 」に置き換えられます。 ハッシュではこの書き方が一般的なようです。 この場合も、シンボルでキー名を指定していることには変わりないので、ハッシュの値を呼ぶ時はシンボルで指定します。 引用元 https://setechlog.com/ruby-hash-colon/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

rails g modelを実行するとどうなるか?そしてその後にやるべきこととは?

rails g modelをすると ①db/migrateフォルダに新しくマイグレーションが作成されます。 ②新しく作られたマイグレーションファイルの中身をざっと確認する。 ③以下のコマンドでデータベースへと反映させる。 rails db:migrate #rails g modelでモデルを作成したあとは、このコマンドを実行してデータベースにちゃんと反映させること! マイグレーションファイルとは? マイグレーションファイルは、データベースを生成する際の設計図になるものです。 また、マイグレーションファイルを実行することで、記述した内容に基づいたデータテーブルが生成されます。 引用元: 「マイグレーションファイルとは?」より一部抜粋 https://qiita.com/jackie0922youhei/items/09a7b081e40506f07358#:~:text=%E3%83%9E%E3%82%A4%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A8%E3%81%AF,%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%8C%E7%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rails7をちょっと試す(Bootstrap編)

はじめに Rails 7.0.0 では、Bootstrap が簡単に利用できるようになっています。 今回は、Bootstrap を試してみたいと思います。 Bootstrap を使うためには、npm と yarn が必要です。 以下のバージョンで確認しました。 Ruby 3.0.2 Rails 7.0.0 npm 8.3.0 yarn 1.22.17 Rails プロジェクトを作る 新しくRailsプロジェクトを作ります。このとき --css を指定します。 (データベースオプションを指定しているのに深い意味はありません。) mkdir rails_sandbox cd rails_sandbox rails new . --database=postgresql --css=bootstrap scaffold を実行する scaffold を使って簡単なCRUDを作ります。 Bootstrap の確認をしたいだけなので適当です。 bin/rails g scaffold User name DBを作成し migration を実行する bin/rails db:create db:migrate Rails を実行する 動作を確認するため、Rails を実行します。 Procfile.dev を指定して foreman bin/dev を実行します。 bin/dev ブラウザからアクセスする http://localhost:3000/users にアクセスします。 Bootstrap が使えることを確認する Bootstrap が使えることを確認するため、 app/views/users/index.html.erb を修正します。 New User のリンクをボタンっぽくしてみます。 app/views/users/index.html.erb <p style="color: green"><%= notice %></p> <h1>Users</h1> <div id="users"> <% @users.each do |user| %> <%= render user %> <p> <%= link_to "Show this user", user %> </p> <% end %> </div> <%= link_to "New user", new_user_path, {class: "btn btn-primary mx-1"} %> ブラウザの画面は以下のようになります。 Bootstrap のバージョン package.json を調べてみたところ、Bootstrap のバージョンは 5.1.3 になってました。 $ grep bootstrap package.json "bootstrap": "^5.1.3", "build:css": "sass ./app/assets/stylesheets/application.bootstrap.scss ./app/assets/builds/application.css --no-source-map --load-path=node_modules" まとめ 今回は、Bootstrap が使えることを確認しました。 試したコードは、 https://github.com/suketa/rails_sandbox/tree/try_rails7_bootstrap になります。 参考情報 Bootstrap Buttons
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[py2rb] 直列化

はじめに 移植やってます。 ( from python 3.7 to ruby 2.7 ) 直列化 (Python) import pickle self.assertEqual(dict_, pickle.loads(pickle.dumps(dict_))) オブジェクトと、オブジェクトを直列化しさらに復元されたオブジェクトを比較していますが、Equal にならないこともあるのでしょうかねえ? 直列化 (Ruby) assert_equal dict_, Marshal.load(Marshal.dump(dict_)) 独習Ruby 330p 7.2.7 オブジェクトのシリアライズ ここでは、dumpをオーバーライドして特定のデータのみシリアライズする例が紹介されています。 メモ Python の 直列化 を学習した 百里を行く者は九十里を半ばとす
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む