20220125のRubyに関する記事は5件です。

多重代入についてまとめてみました

ruby silverの勉強をしていく中で間違えたところがあったのでその解説記事を挙げていきます 多重代入 基本的な使い方 a, b, c = 1, 2, 3 a # => 1 b # => 2 c # => 3 右辺の要素が左辺の要素よりも多い場合は無視される a, b = 1, 2, 3 a # => 1 b # => 2 #この場合3は無視される 右辺の要素が左辺の要素よりも小さい場合は無視される a, b, c = 1, 2 a # => 1 b # => 2 c # => nil 該当する要素がない場合は、nilになる 残った要素は、配列として格納される a, *b = 1, 2, 3 a # => 1 b # => [2, 3] ・残りの要素が1つの場合でも、配列になる a, *b = 1 ,2 a # => 1 b # =>[2] ・残りの要素がない場合でも、配列になる a, *b = 1 a # => 1 b # => [] ネスト (a, b), c, d = [1, 2], 3 a # => 1 b # => 2 c # => 3 カッコを使うことで、ネストした配列の要素を代入することができる 左辺にカッコを使って、右辺に何もつけないとき (a, b), c = 1, 2, 3 a # => 1 b # => nil c # => 2 bにはnilが代入され、3は無視される 何か間違いがあったら、ご指摘いただけると嬉しいです! 【参考記事】
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ruby入門 Ruby3導入方法 for mac (2022) 環境構築

新しいMacbookにRubyを導入する工程をまとめます。 動作環境 MacBook    (Retina, 12-inch, 2017) MacOS     Monterey 12.1 Processor    1.4 GHz Dual-Core Intel Core i7 Memory     16 GB 1867 MHz LPDDR3 まずは現在のRubyのバージョンの確認 ターミナルで ruby -v と打ち込むと ruby 2.6.8 だと判明。 まずは下準備として 下記URLからHomebrewをインストール https://brew.sh/index_ja.html インストールの文字のしたのスクリプトをコピーしてターミナルにペーストする。 何度かパスワードを入力を求められるのでMacのパスワードを入力する。 環境にもよるだろうがダウンロード、インストールに筆者はかなり時間がかかった。 無事インストールが終わった後   下記コマンドを実行してrbenvとruby-build をインストールする。 brew install rbenv インストールが終わったら続いて下記コマンドを実行しrbenvの設定をする。 rbenv init 上を実行するとターミナルに # Load rbenv automatically by appending # the following to ~/.zshrc: eval "$(rbenv init - zsh)" と出てくるので ~/.zshrc を実行するも zsh: no such file or directory: となるので touch .zshrc を実行しファイルを作成 open ~/.zshrc でエディタを開き下記を書き込み保存 eval "$(rbenv init - zsh)" ターミナルを再起動するか source ~/.zshrc を実行し設定を反映させる。 rbenv を実行しバージョンが出ればOK いよいよRubyのインストールに入ります rbenv install -l でインストール可能なバージョンを確認 2.6.9 2.7.5 3.0.3 3.1.0 jruby-9.3.2.0 mruby-3.0.0 rbx-5.0 truffleruby-21.3.0 truffleruby+graalvm-21.3.0 今回は安定版の3.1.0をインストールしていきます rbenv install 3.1.0 ここもかなり時間がかかりました。 インストールが完了したら ターミナルを再起動し rbenv global 3.1.0 とすることで全てのシェルで3.1.0が使えます。 再度 ruby --version でバージョンを確認すると見事 ruby 3.1.0 と表示されインストールが完了した。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

RubyのFileの解説

rubyのsilverを勉強していく中で、この問題が正解できなかったので、それを解説する意味でもこの記事を書かせていただきます。 この問題を正解するうえで、抑えておくべきポイントは、 w :書き込みモード。 w+ :読み書きモード。既にファイルが存在する場合は、空になります。新規作成もされます。 r :読み込みモード。 r+ :読み書きモード。ファイルの読み込みと書き込みの位置は文の先頭から。 a :追記モード。既存のファイルの文末に入力内容を追記する。 a+ :読み書きモード。ファイルの読み込み位置は先頭に、書き込み位置は常に末尾になる 1個ずつ解説していきますね w wはwriteのwと覚えれば役割がはっきりしますね。 既存のファイルに、書き込みをしていく機能なんですね。 r readのrと覚えればわかりやすいですね! 既存のファイルを読み込む機能ですね。どんな記述がされているかなどを読みこむためのものですね。 a appendのaと覚えれば分かりやすいですね! appendメソッドと同じように、書き込み位置は末尾になるんですね。 +がつくとどうなるか? +がつくとどうなるか?どっちもできるようになります。例えばどういうことかというと、 wは書き込みモードですが、+がつくと読み込み機能も付加されるんです。他も同様に、ない機能が追加されるといった感じです! IOクラスについて IOクラスとは、外部データとやり取りするための機能として、入力(Input)と出力(Output)を提供するためのものなんです。 IOはinputとoutputの頭文字をとったものなんですね。 seekメソッドに関しては、こちらの公式ドキュメントをお読みください! seek_setは今回の問題でいえば、値は先頭からということですね。 今回の問題の正解 今回の問題でいえば、wとw+は不正解です。なぜなら、今回の問題のIO:seek_setはファイルポインタを先頭に移動するため、上書きされてしまうんですね。 表示結果がrecode2だけが表示されるんですね。 そのため、今回でいうと正解は、aとa+です 以上です! 間違い等ございましたら、ご教示いただけると幸いです!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

railsでカレンダー機能を実装する方法

はじめに  この記事はプログラミング学習の備忘録です。  現在習慣化アプリを実装中です。その中でsimple_calenderを使って簡単にカレンダー機能を実装する方法について学んだので紹介します。 実装の目標 ①以下のようなカレンダーを導入する ②タスクを記録したら、カレンダーが緑色になるようにする gemfileを導入  ・gemfileに以下の記述をします。  gem 'simple_calendar', '~> 2.0' その後忘れずに、bundleinstallしましょう。 これでgemfileの導入は完了です。 モデルの設定をする  以下のようにモデルを設定します。今回はテストなのでシンプルな形で作ります。 マイグレーションファイルに以下のように記述して、「rails db:migrate」します。 t.string :title t.text :content t.datetime :start_time t.timestamps 注意点としては、t.datetime :start_timeの部分です。 start_timeで入力された日時をもとにカレンダーと紐付けます。 従って、「投稿内容をカレンダーに反映させる処理」を実装する場合には、 datetime型のstart_timeカラムを作る必要があります。 viewに表示させる 次にsimple_calenderの保有するメソッド「month_calenderメソッド」を使って、月毎のカレンダーを表示させます。 index.html.erb <%= month_calendar do |date| %> <%= date.day %> <% end %> すると以下のようなカレンダーが表示されます。 デフォルトなのでシンプルです。 投稿フォームを作る  次に投稿を行うためのフォームを作ります。 new.html.erb <%= form_with(model: @event, local: true) do |form| %> <div class="title"> <%= form.label :title %> <%= form.text_field :title %> </div> <div class="time"> <%= form.label :start_time %> <%= form.datetime_select :start_time %> </div> <div class="content"> <%= form.label :content %> <%= form.text_field :content %> </div> <div class="submit"> <%= form.submit %> </div> <% end %> 注目して欲しいのは、 <%= form.datetime_select :start_time %>です。 この記述でカレンダーと紐づけるための日時用のフォームを作っています。 カレンダーと投稿を紐づける 次にviewのカレンダーを修正します。 index.html.erb <%= month_calendar events: @events do |date, events| %> <%= date.day %> <% events.each do |event| %> <div> <%= event.title %> </div> <% end %> <% end %> datetime型のstart_timeカラムをもとにカレンダーと紐付けます。 実行すると以下の表示になります。 無事25日の場所に、無事に投稿内容を出現させる事ができました。 レイアウトを整える  次にデフォルト表示のレイアウトを整えます。 ターミナルで以下のコマンドを実行します。 rails g simple_calendar:views するとレイアウトを整えるためのviewファイルが生成されます。 このままだと特に何も変化はないので、 stylesheets/application.cssに以下のコードを追記します。 *= require simple_calendar ページを更新すると、 レイアウトを整える事ができました! ここまでで、基本的なカレンダーの実装は完了です。 投稿すると緑色になる実装  最後に投稿すると緑色になり、継続率が分かるようにします。(習慣化アプリなどでよく実装されているものです) scssファイルに以下のように記述します。 このフォーマットはsimple_calenderのreadmeからコピペできます。 https://github.com/excid3/simple_calendar/blob/master/README.md .simple-calendar { .day {} .wday-0 {} .wday-1 {} .wday-2 {} .wday-3 {} .wday-4 {} .wday-5 {} .wday-6 {} .today {} .past {} .future {} .start-date {} .prev-month {} .next-month { } .current-month {} .has-events { background: #98fb98; } } 注目して欲しいのは、.has-events に背景色を指定しているところです。 この記述によって背景色が変化します。 これで、継続率が分かる実装ができました! まとめ  今回はsimple_calenderを使ってカレンダー機能を導入する方法についてまとめました。 最初は難しそうだなと思っていたのですが、想像以上に簡単に実装する事ができました。 カスタマイズすれば、更に使いやすいカレンダーができると思うので、進展があればまた記事にまとめます。 参考文献 https://qiita.com/AKI3/items/109d54a35c98328d9155
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】ページ遷移せずにいいねをしたい/取り消したい

みなさん、こんにちは! 筆者は大学生限定のプログラミングスクール「GeekSalon」でメンターをしています! 興味のある方や話だけでも聞いてみてい方はぜひのぞいてみてください? さっそく今回の本題に入っていきます! 今回は投稿に対するいいねを、ページ遷移せずともできる/取り消せるようにしていきたいと思います。 なお、いいね機能は実装済みという前提で話を進めていくため、いいね機能をまだ実装していない人は先にそちらの実装をお願いします。 また今回の実装では部分テンプレートを用いています。部分テンプレートについての理解が怪しい方は、参考となる記事を載せておきますので、そちらも参照してください! 実装環境 ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x64-mingw32] Rails 6.1.4.1 (※投稿機能、投稿に対するコメント機能は実装済みという前提で記事を書いていきます。) 実装① ~Javascriptを使えるようにする~ ページ遷移をせずに動的なプロセスを実行する方法はいくつかありますが、今回はJavascriptを用いて実装していきます。そのためにまずはJavascriptを使うことができるように記述を加えていきましょう。Javascriptと聞いて身構えたひともいるかもしれませんが、そんなに難しいプロセスは必要ないため安心してください。 まずは、view/layouts/application.html.erbの該当箇所に以下の記述を加えていきます。 view/layouts/application.html.erb <head> #省略 <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %> #←この1行を追加 #省略 </head> これでJavascriptの記述が有効になりました。 実装② ~Viewファイルを整えよう~ Javascriptを使えるようにしたため、次はViweファイルを変更していきます。 まずは、view/likes/の配下に、_like.html.erbとcreate.js.erbとdestroy.js.erb```の3つのファイルを作成します。1つ目のファイルはアンダーバー(_)から始まる部分テンプレートであるということ、そして後半2つはhtmlファイルではなくjsファイルであるということに注意しつつファイルを作りましょう。 この後半2つのjsファイルが、likesコントローラーのcreateアクションとdestroyアクションの実行に対応したファイルとなります。 では、作成した3つのファイルにそれぞれ記述を加えていきましょう。 まずは_like.html.erbファイルへの記述です。このファイルには、投稿一覧のviewページに記述してある、いいねボタンに関する記述をそのままコピーしてきて貼り付けましょう。 貼り付けた結果は以下のようになります。 view/likes/_like.html.erb <% if user_signed_in? %> <% if current_user.already_liked?(t) %> <%= link_to tweet_like_path(id: t.id, tweet_id: t.id), method: :delete do %> <p>いいねを取り消す</p><%= t.likes.count %> <% end %> <% else %> <%= link_to tweet_likes_path(id: t.id, tweet_id: t.id), method: :post do %> <p>いいね</p><%= t.likes.count %> <% end %> <% end %> <% else %> <p>いいねの数 = </p><%= t.likes.count %> <% end %> さて、では2つのjsファイルにも記述を加えていきましょう。 それぞれのファイルに以下の記述を張り付けてください。 なお、@tweet(やt)といった変数は、自身のプロダクトに対応したものに書き換えてください。(変数tはlikes/_like.html.erbで用いた変数と同じものにする) view/likes/create.js.erb $('#likes_buttons_<%= @tweet.id %>').html("<%= j(render partial: 'likes/like', locals: {t: @tweet}) %>"); view/likes/destroy.js.erb $('#likes_buttons_<%= @tweet.id %>').html("<%= j(render partial: 'likes/like', locals: {t: @tweet}) %>"); 最後に、投稿のページ(投稿一覧ページや投稿詳細ページ)にて、_like.html.erbの記述が反映されるように、それぞれ以下の記述を加えてください。 なお、@tweetやtといった変数は、自身のプロダクトに対応したものに書き換えてください。 view/tweets/index.html.erb <div id="likes_buttons_<%= t.id %>"> <%= render partial: 'likes/like', locals: { t: t } %> </div> view/tweets/show.html.erb <div id="likes_buttons_<%= @tweet.id %>"> <%= render partial: 'likes/like', locals: { t: @tweet } %> </div> タグについているidは、create.js.erbとdestroy.js.erbとこの記述を紐づけるためのもの、<%= render ~ %>の記述は_like.html.erbを呼び込むための記述です。 さて、ここまでの記述でViewファイルは完成です。 実装③ ~コントローラーの記述変更~ 最後に、likes_controller.rbの記述を変更していきます。 まずは、viewにあるjsファイルが変数@tweetを受け取ることができるように、@tweetを定義していきます。 また、Javascriptでいいね/いいね取り消しを動的に行えるようにしている状態のため、redirectの記述も消していきます。 変更前と変更後は以下のような感じです。 変更前 likes_controller.rb def create like = current_user.likes.create(tweet_id: params[:tweet_id]) #user_idとtweet_idの二つを代入 redirect_back(fallback_location: root_path) end def destroy like = Like.find_by(tweet_id: params[:tweet_id], user_id: current_user.id) like.destroy redirect_back(fallback_location: root_path) end 変更後 likes_controller.rb def create @tweet = Tweet.find(params[:tweet_id]) like = current_user.likes.create(tweet_id: params[:tweet_id]) end def destroy @tweet = Tweet.find(params[:tweet_id]) like = Like.find_by(tweet_id: params[:tweet_id], user_id: current_user.id) like.destroy end 以上で実装は完了です! rails sをして、自分のプロダクトでいいねボタンを押してみてください! ページ遷移せずに、その場でいいねができるようになっているはずです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む