- 0.0.1. Progate Ruby on Rails5 IV ~ V 個人的ざっくりまとめ
- 0.0.2. 【Ruby】二次元配列に要素を代入すると、他の要素まで変更されてしまうときの対処法
- 0.0.3. アソシエーションについて!
- 0.0.4. 初めてのオリジナルアプリ【My内閣】
- 0.0.5. 1対多の要素を1つのviewで登録する/個人開発のつづき
- 0.0.6. ユーザーのURLをmyapp.com/usernameとかmyapp.com/settingsみたいなナウい感じにしたい(Rails)
- 0.0.7. 【Rails】「教材シェア」アプリを作成しました②
- 0.0.8. Rubyでのデバック(binding.pry)の使い方
- 0.0.9. Ruby特有のif文
- 0.0.10. テストコードについて!
- 0.0.11. [Rails]パーシャル内パーシャルのrender繰り返しを防ぐには
- 0.0.12. 【Ruby】Qiita デイリー LGTM 数ランキング【自動更新】
- 0.0.13. webサイトにLINEやTwitterの共有ボタンを作る
- 1. 今回追加するボタン
- 2. では実装!(Twitter)
- 3. 本章の学習内容
Progate Ruby on Rails5 IV ~ V 個人的ざっくりまとめ
# 投稿の編集
流れは、以下の通り。
①**編集したい投稿を取得**
②**その投稿のcontentの値を上書き**
③**データベースに保存**“`terminal:ターミナル
$ rails console> post = Post.find_by(id: 1) #①
> post.content = “Rails” #②
> post.save #③
“`# フォームに初期値を設定
textareaタグで囲んだ部分を初期値として設定できる。
“`erb
“`特定のアクションで、URLのidと同じidの投稿データをデータベースから取得し、そのcontentの値を初期値に設定したりできる。
“`rb:posts_controller.rb
def edit
@post = Post.find_by(id: params[:id])
end
“`
“`erb:posts/edit.html.erb
【Ruby】二次元配列に要素を代入すると、他の要素まで変更されてしまうときの対処法
# 二次元配列への代入がうまくいかない
3✕3の二次元配列をつくります。
“`ruby
a = Array.new(3, Array.new(3, 0))
p a # => [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
“`見た目上は問題ありませんね。二次元配列ができています。
ですが、要素を代入してみると、
“`ruby
a[0][0] = 1
p a # => [[1, 0, 0],[1, 0, 0],[1, 0, 0]]
“`あれ…??
1つ目の配列の1番目に要素を代入したはずですが、全ての配列の1番目が変わってしまっています。オブジェクトIDを確認してみましょう。
“`ruby
p a.map(&:object_id)
# => [60, 60, 60]
“`3つの配列とも同じオブジェクトになっちゃってます。
これが原因っぽい。# 対処法
mapメソッドを使うことで、上記の問題を回避できます。
“`ruby
a = Array.new(3).map { Array.new(3,0) }p a #
アソシエーションについて!
#①.結論!
アソシエーションとは、モデルを利用したテーブル同士の関連付けのことです!
アソシエーションをモデルに定義することで、そのモデルに紐づく別のモデルの情報へアクセスできるようになります!
それでは、どのように定義するかを見ていきます!
#②.has_manyメソッド
例えばTwitterに考えてみます!
Userモデルの視点で考えると、あるユーザーの作成した投稿は「複数個」ある状態です!
1人のユーザーは複数の投稿を所有しています!
この状態のことをhas manyの関係といい、今回の場合は「User has many Twitters」の状態であると言えます!
この関連付けをするため、userと他のモデルとの間に「1対多」のつながりがあることを示すのがhas_manyメソッドです!
つまり、1人のユーザーは何個も投稿できるので、has_manyという事です!
下記が記述例となります!
“`php:app/models/user.rb
class User < ApplicationRecord devise :database_authenti
初めてのオリジナルアプリ【My内閣】
こんにちは!テックアカデミーのWebアプリコースを受講している駆け出し高校生エンジニアの安田駿介です。
本日、テックアカデミーの受講最終日です。
ギリギリでオリジナルアプリを完成し、合格することができました。
今回は、そのオリジナルアプリを公開していきたいと思います。
なお、このアプリは僕がプログラミングを始めて、一番最初のオリジナルアプリとなっています。
#アプリURLとGitHubのリポジトリ
https://my-naikaku.herokuapp.comhttps://github.com/yasshun1229/my-naikaku.git
#内容
アプリ名は「My内閣」です。
My内閣は、自分だけの内閣を作れるというアプリです。
具体的には、ログインして、内閣作成ページに行き、各閣僚の入力フォームに自分が指定したい人の名前を書くことです。
#開発環境
・AWS
・Cloud9
・Ruby 3.0.0
・Rails 6.1.3.1
・Bootstrap#感想
正直に言うと、このアプリは全て自分で作ったわけではなく、メンターさんから分からないところの
1対多の要素を1つのviewで登録する/個人開発のつづき
# はじめに
ずっとコードを書いていたが、それだけではだいじなことを忘れそうな気がしたので、ここに記録しておこう。今、個人開発で日報アプリをつくろうとしている。ユーザーは日々の記録を書ける。各作業のジャンル、作業名、何時間したかさいごにその日のコメントをつける。ログインした後、reportを登録する。reportひとつに対してreport_itemを複数登録できる。以下のようにしたい。
“`
例:
ユーザー名:satou
登録日: 2021/10/21
report_item 1
ジャンル: Ruby
やったこと: メソッド復習
作業時間: 1時間report_item 2
ジャンル: 英語
やったこと: TOEIC対策
作業時間: 2時間report_item 3
ジャンル: 筋トレ
やったこと: ランニング
作業時間: 0.5時間全体のコメント:
よくできた。“`
これを実現するにはどうすればいいのだろう。ひとつずつやっていくことにした。
# モデルを考える
まずはモデルとその関係性を考えない
ユーザーのURLをmyapp.com/usernameとかmyapp.com/settingsみたいなナウい感じにしたい(Rails)
## やりたいこと
ユーザーのマイページやアカウント設定ページのルーティングをしたいです。
普通にRailsの`resources`メソッドに任せてしまうと、`my_app.com/users/:id`てな具合になってしまいます。でも、ナウいQiitaとかnoteとかだとこんな感じになっています。
“`
https://qiita.com/kakudaisuke
https://qiita.com/settings/accounthttps://note.com/kakudaisuke
https://note.com/settings/account
“`シンプルでかっこいいじゃないですか!
僕のアプリもこうしたい!実装してみて、簡単にできたものの、細かいところの調整がやや面倒だったのでメモを。
### 環境
ruby 2.7.2
Rails 6.1.4.1## 実装!
### routes“`ruby:config/routes.rb
Rails.application.routes.draw do
root ‘posts#index’
#
【Rails】「教材シェア」アプリを作成しました②
## 1.はじめに
閲覧していただきありがとうございます。
前回作成したアプリをさらに改善、機能を追加しました。
そのときの開発の苦悩などをまとめました。
よろしければ、ご覧ください。
## 2.関連URL
アプリ:https://teaching-materials-app.herokuapp.com/
Github:https://github.com/suugakusan/teaching_materials_app
前回のQiita:https://qiita.com/suugakusan/items/15b5b6e9b81726344342
## 3.機能一覧
| |機能 |gem |
|:—: |:—: |:—: |
|1 |ログイン・ログアウト |× |
|2 |アカウント登録 |× |
|3 |教材検索 |× |
|4 |教材投稿 |carrierwave |
|5 |ページネーション |pagy |
|6 |レスポンシブ |Bootstrap |
|7 |ゲストログイン |× |
|8 |記事投稿機能(CRUD
Rubyでのデバック(binding.pry)の使い方
#デバックとは
***デバックとはプログラムにエラーや異常がないかを確認し、修正する***ことです。
***実務ではデバックをしながらプログラムを書いたり、エラーの原因を特定する時に
使います。実務をやる上で必須みたいです。***プログラミング以外でもゲームが完成した後に、想定通りに動くかを
検証したりする仕事があります。デバッカーという仕事です。
このデバッカーがいないと、誤った動作をしたままゲームがリリースされてしまいます。上でも紹介したようにデバックをしないとクライアントにも迷惑をかけてしまう
リスクが出てきます。
プログラマーが開発をする上でデバックをしながら開発していくので必須のスキルとなるので
“`初学者の段階から毎日の学習でデバックを使い慣らしていく必要があります。“`#binding.pryとは
この***binding.pry***がデバックで使うコマンドです。
必須なので抑えておきましょう。#デバックの導入
以下のコマンドでインストールします。“`
gem install pry-byebug
“`
#binding.pryの使い方
*
Ruby特有のif文
Rubyを勉強し始めて1日目
初心者として気になったこと・躓いたことを備忘録として残していこうと思います。#構文
“`ruby:if文
if 条件A
# 条件Aが真だった場合の処理
elsif 条件B
# 条件Bが真だった場合の処理
elsif 条件C
# 条件Cが真だった場合の処理
else
# どの条件に対しても真にならなかった場合の処理
end
“`
:::note warn
複数条件の場合は、else ifではなくelsifです。
:::
JavaScriptなどの言語から勉強している方は注意が必要です。(私も間違えやすい…)##便利な性質
###戻り値を返す
Rubyのif文は戻り値を返すため、変数に戻り値を代入することができます。
以下は時間帯によって表示する挨拶を変更するコード例です。“`ruby:戻り値を変数に代入する
time_zone = ‘夜’greeting =
if time_zone == ‘朝’
‘おはよう’
elsif time_zone == ‘昼’
‘こんにちは’
elsif
テストコードについて!
#①.結論!
テストコードとは、アプリケーション内に記述する、そのアプリケーションの挙動を確認するためのコードのことです!
Ruby on Rails内にも、アプリケーションのテストコードを記述する機能を設けることが出来ます!
その機能は「RSpec」というGemを使うことで便利に実装できます!
#②.なぜテストコードを書くのか?
テストコードを書く意義は大きく分けて2つあります!
1・クオリティの担保ができる!
ブラウザデアピリケーションの挙動を確認するのは、デメリットの方が多いです!
主な理由は3つです!
・人為的なミスが生じるかもしれない!
・仕様が変更した際に、もう1度全部やらないといけない!
・どのように確認したか、記録が残らない!このようなことがあります!
2・仕様を見極めることが出来る!
テストコード書くことが出来れば、アプリケーションの仕様を理解していることになる!主な理由は2つです!
・テストすべき項目を洗い出すときに使用を見極めることが出来る!
・テストコードを書ける人は、仕様を理解している人!以上が、テストコードを書くための理由
[Rails]パーシャル内パーシャルのrender繰り返しを防ぐには
# ハマった点
投稿一覧ページに「いいねボタン」を設置する際、各投稿のパーシャルをrenderする際の繰り返しは、collectionオプションにて解決できた。
しかし、各投稿のパーシャルの中でrenderしているパーシャルにおいては、投稿の分だけrenderの繰り返しが発生してしまう。
↓実際のログ
このrenderのせいで、たった25件の投稿表示に1800ms以上の時間がかかってしまう。しかも、Ajaxによる非同期処理でいいねボタンの切り替えを実装しているため(DRYの観点でも)、いいねボタンをパーシャル化しなければならない。(他に方法があれば知りたいです!) 同じ状況の方も多いのでは?# 解決策
renderの**layoutオプション**と**yieldメソッド**を使うことで解決した。# E
【Ruby】Qiita デイリー LGTM 数ランキング【自動更新】
# 他のタグ
[`AWS`](https://qiita.com/items/8c4aeec4fc98e4b1ba0e) [`Android`](https://qiita.com/items/9c6bf21a9880e242a0d6) [`Docker`](https://qiita.com/items/70aa655b580ed4f91756) [`Git`](https://qiita.com/items/36cfb2318aabe8b3f8df) [`Go`](https://qiita.com/items/16809f8444e0329bed8a) [`iOS`](https://qiita.com/items/da7fabcf41ed103528ae) [`Java`](https://qiita.com/items/9003b8beb47a46292028) [`JavaScript`](https://qiita.com/items/31e7365a838b890f7cc3) [`Linux`](https://qiita.com/items/7bcae94b268b
webサイトにLINEやTwitterの共有ボタンを作る
今自分が作っているサイトにlineとかの共有つけたいなーって思って調べてみたらめっちゃ簡単だったのでカキコ
今回追加するボタン
![スクリーンショット 2021-10-16 13.47.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1541345/2afd5a05-2614-a481-a6ff-3a32eb873da4.png)
これはFont Awesomeで持ってきたやつですがLINEの方は下のリンクからいろいろ選べます。
https://media.line.me/ja/how_to_install#lineitbutton
では実装!(Twitter)
“`
<%= link_to "Twitterに共有", "https://twitter.com/intent/tweet?url=#{request.url} %>
“`これを追加するだけです。
はい。終了!
と行きたいのですが、いろいろ共有する時に追加できるのでそれを書きます
【個人用】rails tutorial -2
本章の学習内容
大量の機能を自動生成するscaffoldジェネレータというスクリプトを使ってアプリケーションを生成し、高度なRailsプログラミングとWebプログラミングの概要を学ぶこと
ユーザーモデルの設計
各ユーザーには、重複のない一意のキーとなるinteger型のID番号(idと呼びます)を割り当て、このIDに加えて一般公開されるstring型の名前(name)、そして同じくstring型のメールアドレス(email)を持たせます。emailはユーザー名としても使われる
マイクロポストのモデル設計
テキスト内容を格納するtext型のcontentだけで構成されています 。しかし実際には、マイクロポストをユーザーと関連付ける必要があります。そのため、マイクロポストの投稿者を記録するためのuser_idも追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1617255/a19fe1f
公式APIを使わずにTwitter Analytics(アナリティクス)の情報を取得する方法
# 概要
![スクリーンショット 2021-10-16 1.30.28_censored.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/cd67e1fb-c5d0-f448-5caf-246bbaa62d2f.jpeg)
先日、とある業務の一環において「Twitter Analyticsの情報(上記画像のような部分)を毎日記録しておいてくれ」といった感じの指令を受けました。
![スクリーンショット 2021-10-16 1.40.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/c0ac6498-3329-9e8a-a878-4a989eb2f54a.png)
一応、Twitter Analyticsのページ([https://analytics.twitter.com](https://analytics.twitter.com))では過去にさかのぼって各種データをCSV形式でエク
collectionとmemberについて!
#①.結論!
collectionとmemberは、ルーティングを設定する際に使用でき、生成されるURLとコントローラーを
任意にカスタムできるメソッドのことです!
collectionはルーティングに:idがつかない!
memberは:idがつくという違いがあります!
1つずつ使用例を見ていきましょう!
#②.collection
collectionで定義した場合は、以下のように例になります!
“`php:routes.rb
Rails.application.routes.draw do
resources :eats do
collection do
get ‘search’
end
end
end
“`collectionのルーティング
“`php
Prefix Verb URI Pattern
search_eats GET /eats/search(.:format) eats
【個人開発】モノやサービスを供養できるアプリを作ってみた。
## はじめに
![top-image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/870132/8e094d39-f9f2-fa91-6e7b-443b22c5c7c7.png)>・買ったばかりのスマホを落として画面バキバキになってしまった
>・サポート終了になるInternetExplorer
>・元カレのくれたプレゼント「どうしよう…」
そのあと湧き上がる
「やり場のない気持ちをぶつけたい」
みなさんにもそんな時があると思います。
お世話になったモノやサービスに敬意を込めて供養してあげる。
とても慈悲深いアプリが出来ました。
https://omailly.jp/
## サービス概要
投稿されたタイトルをクリックすると、専用のお墓に見立てた位牌が鎮座しています。
![moko.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/870132/bcdcde41-963a-26bc-fc31-2
【Ruby】あと何日かを求める
##環境
Ruby 3.0.2##前提
12月10日までに100記事目標にしている自分に対して、今の投稿進捗を教えてくれるbotに台詞を追加したい。
(実際のbotの書き方とは少し異なる)
あと何日か、1日何記事ペースで書いたらいいのかをrubyで書くときに少し詰まったので記事に残す。
現在27記事投稿済み。
“`Date.today“`は2021年10月15日とする。##完成形
“`ruby
require ‘date’today = Date.today #2021年10月15日
limit = Date.new(2021, 12, 10)
articles_count = 27
# 残りの日にちから土日祝の18日分を引く
REMAINING_DAYS = (limit – today).to_i – 18.freeze
PER_DAY = ((100 – articles_count) / REMAINING_DAYS.to_f).round(2).freezep “本日までの記事投稿数は#{articles_count}記事になりました!!\n目標まであ
商品購入機能の実装 〜「商品購入ページへの遷移」の実装①〜
#はじめに
先日、最終課題アプリ作成において「商品購入機能」の実装を開始しました。
__最大のヤマ場__といわれており、恐らく実装に時間がかかると思います。そこで、これまで自身が学んできた内容や考えた過程などを、記事として残していこうと思います。駄文・長文になること請け合いですが、ご覧いただけると幸いです。
ただし、現時点での私の知識・技術については__プログラミングという大海原に片足の親指を突っ込んでちょんちょん水面を揺らしている程度__(だと思っている)ので、__「それ、ちょっと間違っているよ!」__というご指摘や、__「こうした方がいいよ!」__というご意見をいただけると、非っっっっっ常ありがたいです。泣きながら土下座して喜びます。
#「商品購入ページへの遷移」の実装①
__とりあえず商品購入ページに遷移できないと始まらないだろ!!!__
ということで、商品購入ページへ遷移できるようにしました。見本サイトの商品購入ペー
[Ruby]10進数⇄2,3,4…16進数に表示してみる(追記・訂正あり)
# はじめに
本記事では、10進数⇄2,3,4…16進数に~~変換~~表示してみる記事です。“`
「追記」
コメントにてご指摘いただきしたが、
正式には、
`to_iメソッド`によって10進数に変換されているのではなく、
10進数として表示されたということになります。
“`詳しくは、以下の記事を参考にしていただけますと幸いです。
[Ruby の “1101”.to_i(2) は 2 進数を 10 進数に変換している,わけじゃない](https://qiita.com/scivola/items/a8976caed1d8ba8f36e8)# コード
こちらを参考にしています。
→[Ruby リファレンスマニュアル](https://docs.ruby-lang.org/ja/latest/method/String/i/to_i.html)“`ruby
p 表示したい10進数の数字.to_s(表示したい○進数の○の部分を記述)
# “表示したい進数の数が表示”p “表示したい○進数の数字”.to_i(表示したい○進数の○の部分を記述)
# 10進数に表示した