- 1. 今回追加するボタン
- 2. では実装!(Twitter)
- 3. 本章の学習内容
- 3.1. ユーザーモデルの設計
- 3.2. マイクロポストのモデル設計
- 3.2.1. 公式APIを使わずにTwitter Analytics(アナリティクス)の情報を取得する方法
- 3.2.2. collectionとmemberについて!
- 3.2.3. 【個人開発】モノやサービスを供養できるアプリを作ってみた。
- 3.2.4. 【Ruby】あと何日かを求める
- 3.2.5. 商品購入機能の実装 〜「商品購入ページへの遷移」の実装①〜
- 3.2.6. [Ruby]10進数⇄2,3,4…16進数に表示してみる(追記・訂正あり)
- 3.2.7. ルーティングのネストについて!
- 3.2.8. 【Ruby】内でstyle要素を書く方法
- 3.2.9. RailsとTiDBの統合について
- 3.2.10. [Ruby]any?を||の代わりに使わない
- 3.2.11. devise ストロングパラメータの仕組みを調べてみた。
- 3.2.12. exists? メソッドを使った簡単な条件分岐
- 4. existsメソッドとは
- 5. 何故使おうと思ったか
【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進数に表示した
ルーティングのネストについて!
#①.結論!
ネストは、ある記述の中に別の記述をして、親子関係を示す方法です!
「入れ子構造」とも呼ばれます!
ルーティングにおけるネストとは、あるコントローラーのルーティングの中に、別のコントローラーのルーティングを記述することです!
ルーティングをネストさせる一番の理由は、アソシエーション先のレコードのidをparamsに追加してコントローラーに送るためです!
例を見ながら解説していきます!
#②.記述について!
下記が記述の形になります!
“`php:routes.rb
Rails.application.routes.draw do
resources :親となるコントローラー do
resources :子となるコントローラー
end
end
“`ルーティングでネストを利用すると、アクションを実行するためのパスで、親子関係を表現できます!
例えば、eats_controller.rbのルーティングの中にcomments_controller.rbのルーティングを記述します!
ネストを利用したときに設定されるルーティングの例を見てみま
【Ruby】<%= %>内でstyle要素を書く方法
こんにちは!テックアカデミーのWebアプリコースを受講している駆け出し高校生エンジニアの安田駿介です。
今回は、「Ruby <%= %>内でstyle要素を書く方法」というテーマで解説していきます。
#誤った書き方
![097f29a41aed890a26dc39803fa42f2f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903726/c35f761b-3012-36ca-7c76-555cc3ead75e.png)
このような書き方だと、エラーになってしまうはずです。
#正しい書き方
![85bbc78926158bb6f935b36ac0c654a0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1903726/addca737-5b93-91ec-658d-90b821330868.png)style要素に注目すると、=ではなく、:を使っています。
#開発環境
・Cloud9
・Ruby
RailsとTiDBの統合について
![shutterstock_1043482054.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1487691/524a55d6-154e-ea40-76de-66584c740def.png)
*この記事は [dev.to](https://dev.to/hooopo/getting-started-with-rails-tidb-4pni)で発表されたものです。*このチュートリアルは、RailsとTiDBの統合に関する、おそらくWebで初めてのチュートリアルです。TiDBは、水平的なスケーラビリティ、高可用性、MySQLとの互換性を特徴とする、オープンソースの分散SQLデータベースです。
初心者にとって、ActiveRecordのような複雑なORMをTiDBに統合するのは難しい可能性があります。Web上にはこのトピックを扱っている記事がほとんどないことから、私はRailsユーザーによるTiDB導入を支援するために、このチュートリアルを執筆しました。
## TiDB開発環境をローカルで構築す
[Ruby]any?を||の代わりに使わない
Rubyの配列(Array)には`any?`という便利メソッドがあります。
https://docs.ruby-lang.org/ja/latest/method/Array/i/any=3f.html
> すべての要素が偽である場合に false を返します。真である要素があれば、ただちに true を返します。
ブロックを伴う場合は、各要素に対してブロックを評価し、すべての結果が偽である場合に false を返します。ブロックが真を返した時点で、ただちに true を返します。上記はドキュメントから転記しました。
any?を使うことで、配列内に特定の条件を満たした要素が1つ以上あること(または存在しないこと)を確認することができます。
また、真の要素が見つかったら以降の判定は行われないと記載されているため計算効率も良いです。簡単に動作確認をしてみます。
配列`[5, 3, 4]`の中に3以下の数値があるかをチェックしています。
何が判定されたか可視化できるように判定ごとに`p _1`で判定した要素を出力するようにしています。“`irb
irb(main):005:
devise ストロングパラメータの仕組みを調べてみた。
##はじめに
サインアップページにdeviseのデフォルトで許可されている要素ではない、”username”を追加することになり、deviseでのストロングパラメータの設定方法を調べた時のことを備忘録として投稿します。##ストロングパラメータとは
**特定のパラメーターのみを許可することで、モデルへの不正なパラメータの流入を防ぐ仕組みのこと。**MassAssingment脆弱性というセキュリティ上の問題に対処するための仕組みとしてRails4系から導入されましたものです。deviseにおいては、モデルにパラメータを送ることのできるアクションは、3つに限定されており、パラーメータも以下のように限定されています。
|action| allowed params|
|:-:|:-:|
|sign_in | authentication keys |
|sign_up | authentication keys, password,password_confirmation |
|account_update| authentication keys,password, pa
exists? メソッドを使った簡単な条件分岐
初めてexistsメソッドを使ったのでメモ
existsメソッドとは
exists?メソッドとは指定した条件のレコードがデータベースに存在するかどうかを真偽値で返すメソッドです。存在すればtrueを存在しなければfalseを返します。
書き方は、“`
オブジェクト.exists?(条件)
モデル名や、モデルクラスのインスタンスなどを指定できます。
“`何故使おうと思ったか
結論から言うとコメントの表示で気になることがあったため。
写真投稿サイトをつくっており、投稿に対するコメントを追加できるようにしています。
コメントが多くなることを想定しているのでページネーションを用いています(gem ‘kaminari’)
コメントは“`
@comments = Commnet.all
“`で取得してそれをviewで対応するidだけを表示するようにしています。
ページネーションを作っていなければ、今回の問題に当たっていなかったので作っていてよかったと思いました。
問題としましては投稿にコメントが追加されていないのにペ