- 0.0.1. HTMLの基礎知識(詳細ページに星機能実装)
- 0.0.2. 100日後くらいに個人開発するぞ!day058
- 0.0.3. 初めてのRailsチュートリアルに挑戦!第6・7章
- 0.0.4. RubyのMix-in(ミックスイン)について
- 0.0.5. Rubyの「継承」と「オーバーライド」について
- 0.0.6. Railsのproduction.rbはどういう事が設定できるの?全ての設定を調べてみた!
- 0.0.7. [Ruby] WSL2上のUbuntuに立ち上げたDockerコンテナ内のRuby SDKをIntelliJのWSLプロジェクトでProject SDKとして扱うことは出来ません!
- 0.0.8. resourcesのネスト
- 0.0.9. Railsでプロフィール画面設定
- 0.0.10. Railsでタイトルをページごとに変化させて表示させたい
- 0.0.11. めちゃ速い!ミラー-ラビン素数判定法
- 0.0.12. 【要反省】入社してから半年間において先輩からのレビューで指摘されたこと5選
- 0.0.13. Ruby on Railsの師匠に学んだリファクタ術
- 0.0.14. CarrierWaveの使い方
- 0.0.15. 正規表現についてまとめてみた
- 1. はじめに
- 2. はじめに
- 3. はじめに
- 4. ヘルパーメソッドを使うメリット
HTMLの基礎知識(詳細ページに星機能実装)
皆さんこんにちわ!!
今日もプログラミングしていますか?:point_up:
今回は詳細ページに星機能をつけていく機能を紹介します!!
注意:大前提としていいね機能を実装していないと実装できません!!:sunny:
![スクリーンショット (55).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738887/e03d307f-eacf-d115-c661-df4361748feb.png)
Step1:星機能(詳細ページ用)の中間テーブルとアソシエーションを組む!!! “`ruby:.ターミナル
rails g model Review eve:integer user:references tweet:referencesrails db:migrate
“`Step2:userとtweetのモデルにアソシエーションの情報を打ち込む!!! “`ruby:app/models/user.rb
has_many :review
100日後くらいに個人開発するぞ!day058
## 今日も継承について学んでみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/4945e170-7e44-d06b-1f7b-7e6ba8cdd398.png)## 今日の学び
### インスタンス変数を用いる際はselfをつける
* 例
* `class Food`
* ` arttr_accessor :name`
* ` arttr_accessor :calorie`
* ` def calorie_info`
* ` return “#{self.name}は#{self.price}円です”`
* ` end`
* `end`### 継承されてないインスタンスメソッドを追加する
* 子クラスに独自のインスタンス変数を追加できたように継承されてないインスタンスメソッドを追加する
* 例
* `class Fo
初めてのRailsチュートリアルに挑戦!第6・7章
# 第6章の学習内容
1. データベースの移行
1. modelファイル
1. ユーザーオブジェクトを作成する
1. ユーザーオブジェクトを検索する
1. ユーザーオブジェクトを更新する
1. 有効性を検証する
1. 存在性を検証する
1. 長さを検証する
1. フォーマットを検証する
1. 一意性を検証する
1. ハッシュ化されたパスワード
1. ユーザーがセキュアなパスワードを持っている
1. パスワードの最小文字数
1. ユーザーの作成と認証# 第7章の学習内容
1. Usersリソース
1. debuggerメソッド
1. Gravatar画像とサイドバー
1. ユーザー登録フォーム
1. ユーザー登録失敗
1. Strong Parameters
1. エラーメッセージ
1. 失敗時のテスト
1. ユーザー登録成功
1. 成功時のテスト
1. プロのデプロイ
1. 本番環境でのSSL
1. 本番環境用のWebサーバー
1. 本番データベースを設定する# 学習を終えて
第6章では、ユーザモデルの作成する際に、有効性や存在性、一意性を検証しながら進めることの大切さを学ん
RubyのMix-in(ミックスイン)について
### モジュール(module)による共通化(MiXx-in)
**モジュール** は、クラスと同じようにインスタンスメソッドを定義することができる。
ただし、モジュールはクラスとは異なり、オブジェクトを生成することができない。
モジュールは、一連の振る舞い(メソッド群)を表し、それをまとめてクラスに取り込むために存在する。また、クラスにモジュールを取り込むには、includeメソッドを使用する。
“`
// class Dog
// include Chatting
// end// *これは、DogクラスにChattingモジュールの一連が取り込まれたということを表す。
// > pochi = Dog.new
// > pochi.chat
// > “ワン”“`
また、モジュールは「部分的な設計書」を表し、クラスという「設計書」に取り込むことで、複数の似たようなクラスを簡単に作成できる。
さらに、1つのクラスに複数のモジュールを取り込ませることができる。
“`
// module Chatting
// def chat
//
Rubyの「継承」と「オーバーライド」について
## 継承
既存のクラスの機能を引き継ぎ、一部を変えて利用する仕組みのこと。
例えば、、、“`
// class Product < PricedObject // attr_accessor :price // end ``` この時、PricedObjectのように、機能を継承する元となるクラスのことを **「親クラス」** または **「スーパークラス」** という。 逆に親クラスから見た時に、自分を継承しているクラスのことを **「子クラス」** または **「サブクラス」** という。 つまり、上記の状況としては、ProductクラスがPricedObjectクラスを継承している。 ## オーバーライド 親クラスが持つメソッドの処理を子クラスに書かれた処理で上書きすること。 ``` // class Book // def title // ‘本のタイトル’ // end // end // class Magazine < Book // def title // ‘雑誌のタイトル’ // end /
Railsのproduction.rbはどういう事が設定できるの?全ての設定を調べてみた!
## なぜ記事を書こうと思ったか
Railsのproduction.rbでどのような設定をしているか及びどのような設定ができるかを確認する為に調べたので、備忘録として残します。## production.rbのコマンド説明
– config.cache_classes = true
ソースコードをリロードしない。キャッシュが適用される。– config.eager_load
Railsのapp以下にあるクラス(ModelやController)を起動時に全て読み込むかどうか設定– config.consider_all_requests_local
すべてのエラーをブラウザに表示をするかの設定
例:Routing Errorなど詳細なエラー情報が表示される。– config.action_controller.perform_caching
アプリケーションのキャッシュの有無– config.require_master_key = true
ENV[“RAILS_MASTER_KEY”]環境変数またはconfig/master.keyファイルでマスターキーを取
[Ruby] WSL2上のUbuntuに立ち上げたDockerコンテナ内のRuby SDKをIntelliJのWSLプロジェクトでProject SDKとして扱うことは出来ません!
めちゃくちゃ長いタイトルになってしまいました、タイトル通りです。
どうやら以前はタイトルの様な事が出来ていたみたいなのですが、現在はSDKとして登録することは出来ても、Project SDKの利用可能なSDK一覧に出ないようになっているみたいです。::: note info
しかし現在開発リクエスト
– [Ability to select remote interpreter for new projects](https://youtrack.jetbrains.com/issue/RUBY-18210/Ability-to-select-remote-interpreter-for-new-projects)として挙がっているので困っている方は是非投票してください。私も困っています。
:::
***
タイトルの問題については上記の内容で全てですが、以下に私がこの問題に直面するまでの詳細な経緯を書いていきます。# やりたくて出来なかったこと
WSL2上のUbuntuにDockerを利用してRailsの環境を作成、ホストのIntelliJからプロジェクトを開いてSDKとし
resourcesのネスト
resourcesのネストをするケース
• モデル間で関連付けが設定されており、親子両方の情報をURLに含めたい場合
routes.rb
“`ruby
resources :boards do
resources :comments
end
# => /boards/:board_id/comments/:comment_id といったURLが得られる
“`このようにする場合
“`ruby
#model/board.rb
has_many :comments#model/comment.rb
belongs_to :board
“`と関連付けてある必要がある。
Railsでプロフィール画面設定
今回はユーザーのプロフィール画面の設定及び編集できる機能を追加していく。
まずユーザーのアイコンを設定・編集したいのでavatarカラムをstring型でUserのmigrationファイルに追加する。
“`ruby
rails g migration AddAvatarToUsers avatar:string
“`Usersテーブルにavatarカラムを追加できた。
次にUsersSettingsコントローラーを作成していく。
“`ruby
rails g controller UserSettings edit update show
“`プロフィール画面は詳細・編集画面があれば良いので今回はshow・edit・updateアクションを定義。
中身はこんな感じ
“`ruby
class UserSettingsController < ApplicationController before_action :set_user, only: %i[edit update] def edit; end def update i
Railsでタイトルをページごとに変化させて表示させたい
# titleをページごとに変化させて表示させたい
・イメージとしては『移動先のページタイトル | 固定タイトル』のようにしたい
・アクセスした時ページは『移動先のページタイトル | 固定タイトル』の『移動先のページタイトル|』はいらないので固定タイトルのみ表示させたい
カスタムヘルパーを作成
app/helper/application.rb下
“`ruby
def page_title(page_title = ”)
base_title = ‘固定ページ名’page_title.empty? ? base_title : page_title + ” | ” + base_title
end
“`そしてview/layout/application.html.erbの
内の内に “`ruby
<%= page_title(yield(:title)) %>
“`と先ほど作成したヘルパーを使用し、webページ全体に適用させる
そして各viewページで
“`ruby
<%= content_for(:title
めちゃ速い!ミラー-ラビン素数判定法
# どのくらい速いの?
素数判定法といえば、 *エラトステネスの篩* を思い浮かべると思います。
与えられた数字が $N$ の時、 $\sqrt{N}$ の長さの配列を用意して、最も小さい素数から試しに割る方法なので、時間計算量も、空間計算量も、めちゃくちゃ食います。
素数の個数を扱うので、厳密にオーダーは計れませんが、割り算の回数を $f(N)$ とすると、
“`math
N \cdot \sum_{a=1} ^ {\log{\left( \sqrt{N} \right)}} \left(\frac{1}{2^a} \right) < f(N) < N \cdot \sum_{a=1} ^ {\sqrt{N}} \left( \frac{1}{a} \right) ``` だと思います。 なので、割り算自体のオーダーを無視すれば、 $\Theta(N^{3/2})$[^0000] あたりではないかと。 $N=10^6$ 辺りから不都合が出るのではないかと思います。(憶測ばかりですね) それに比べ、**ミラー-ラビン素数判定法のオーダーは、**$O(\log(N))$**です**
【要反省】入社してから半年間において先輩からのレビューで指摘されたこと5選
## はじめに
どうも、こんにちは。もきおです。
未経験から自社開発企業に転職し半年が経ちました。あっという間の半年間でしたがその間色々ありがたいことにレビューをいただきました。なので今回は半年前の入社した自分に送る言葉的な感じでレビューで指摘されたことを書き起こしておきたいと思います。最後に対策的なとこも記載しているので最後までご覧いただけますと幸いです。ちなみに弊社はRuby、Railsメインで使用しているのでちょくちょくRubyのメソッドとか出てきます。他の言語使用されている方は適当にあしらってもらえればと笑
## 指摘1: コードちゃんと読んだ?
これは言われることが最も多かった指摘でしたね。何回かこの指摘を受けた時、コードをちゃんと読むってなん何だろう?と疑問に思ったので具体的なポイントを聞いてみました。* 分からない箇所を分からないままで読み進めない
* 想像で決めつけて読み進めない
* 一つ一つデバックして確認する### 分からない箇所を分からないまま読み進めない
企業のコードはポートフォリオと比にならない程のコード量ですよねー。そのためついつい各コードの
Ruby on Railsの師匠に学んだリファクタ術
# はじめに
この記事の対象はこちら↓
– Ruby on Rails初心者です!な方
– Ruby on Railsを使っているけど、リファクタリングって何してるの?という方
– 良いコードを書きなさいと言われたけど改善方法がわからない!という方
– コードを整理したい!と言う方#### 環境
– Ruby ver_2.6
– Ruby on Rails ver_5.1.7:::note info
目次
1. [リファクタリングって何?](https://qiita.com/mattyan_lm/private/2c5fda2d15d2b53e7c33#%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%A3%E3%81%A6%E4%BD%95)
2. [リファクタリングでやること、そのメリット](https://qiita.com/mattyan_lm/private/2c5fda2d15d2b53e7c33#%E3%83%AA%E3%83%95%E3%82%A1%E
CarrierWaveの使い方
## 概要
ファイルアップロード機能を提供するGem。
いろいろなアップロード機能を提供するGemはあるが、その中の一つ。## 導入手順
まずはGemfileに追加。
“`
gem ‘carrierwave’, ‘~> 2.0’
“`uploaderクラスを作成。
“`
rails generate uploader Avatar
“`そうすると以下のファイルが作成される。
app/uploaders/avatar_uploader.rb
“`
class AvatarUploader < CarrierWave::Uploader::Base def store_dir "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end def default_url 'sample.jpg' end def extension_allowlist %w(jpg jpeg gif png) en
正規表現についてまとめてみた
はじめに
正規表現について学んだが、初学者の自分にとってとっつきにくかったため自分なりにまとめてみた内容になっています。
他の初学者の方で同じように思った方の参考になればと思いまとめていきます。:::note info
正規表現とは文字列に特定の文字が含まれているか確認したり、特定の文字を取り除いたり、置き換えるときなどに使用する
:::正規表現
|正規表現の例 |意味 |使用例 |
|:————-:|:—————————–:|:————————–:|
|[] |囲まれた文字のうちいずれかにマッチすること|name.match(/[a-z]/)=>aからzのいずれかに当てはまるか|
|a-z|aからzまでの文字、-で範囲指定できる|上記の例を参照|
|\b|数字が含まれている|age.match(/[\d]/)=>数字が含まれて
初心者向け devise導入について
# 記事にした経緯
私が作成中のアプリにログイン機能を実装するため、`devise`を実装しようとした時に色々な課題があったため忘備録として記事にしました。アプリを作成し`devise`をインストールします。
“`:ターミナル
rails new devise_sumple -d postgreSQL (アプリ作成)
↓
rails db:create (データベース作成)
“`
“`:Gemfile
gem ‘devise’
# ***** 以上を追加 *****
group :development, :test do
# 略
“`
“`:ターミナル
bundle install (gemをインストールする)
↓
rails g devise:install (アプリにdeviseをインストール)
↓
rails g devise User (deviseで認証するためのモデルを作成)
“`
以下のファイルやコードが作成される
“`:ターミナル
Running via Spring preloader in process
ruby returnの返り値が複数の場合
はじめに
メソッド内の処理後、返り値が複数になる場合はどうなるのか気になったので調査し、検証してみました。
returnを使わない場合の返り値
“`test.rb
def return_test(value)
sum_a = 5
sum_b = 10
sum_c = 15
sum_a *= value
sum_b *= value
sum_c *= value
endvalue = 10
x = return_test(value)
puts x
“`
結果
“`
=> 150
“`
:::note warn
メソッドの最後の処理結果しか返ってこない
:::returnで返り値を複数指定した場合
“`test.rb
def return_test(value)
sum_a = 5
sum_b = 10
sum_c = 15
sum_a *= value
sum_b *= value
sum_c *= value
return sum_a,sum_b,su
rails ヘルパーメソッドを使ってviewファイルを整える
はじめに
ヘルパーメソッドを自分で定義することについて学んだので学習したことをまとめて記述していきます。
ヘルパーメソッドを使うメリット
railsでビューファイルに対して行われる処理に関して繰り返して使用するようなメソッドはヘルパーメソッド(ビューファイルに対して使用するモジュール)を自分で定義して使用するとビューファイルの可読性を良くすることができ、また保守などの面から見ても修正しやすくなるメリットがある。
___
メッセージの投稿機能があるWEBアプリケーションでそのメッセージを一覧でメッセージテキストと投稿者を表示したい時などを想定してビューファイルを下記のように作成した場合:::note warn
ヘルパーメソッド使用前
:::
“`app/views/messages/index.html.erb<%= @messages.each do |message| %>
<%= message.text %>
<% end %>“`
:::note i
【Rails】初学者向け_基礎のみを活用しチャット機能を作る方法
## 1.バージョンを確認しましょう!
Rails 5.1.6
ruby 2.7.2p112## 2.完成イメージ
ログイン済みのユーザーで一つのチャットルームを共有し、交流できる機能です。
同じ名前のグループは作成できないようにしてあります。
ぜひclosedな環境でグループを作成し、お話してみてください(^_^)v## 3.実装の大きな流れ
>1.グループチャット機能に必要なModel、Controller、Viewの実装
>2.グループ系モデルとUserモデルの紐付け
>3.ちょっとしたフロントエンドデザインちなみにUserモデルは既に作られている前提で記事を書いています。
筆者はdeviseというgemを使ってUser周りを整えております。ちなみに本記事はこのような目次で進んで行きます!
一緒に楽しんでいきましょう ᕙ( ˙꒳˙ )ᕗ## 4. 必要ファイルを作成しましょう
“`ターミナル
$ rails g controller groups #groups_controller.rbを作成
$ rails g controller cha
【Rails】お問合せフォームの実装
こんにちは!
この記事では、railsで **「お問い合せフォーム」** を実装していきます!
これは、お問い合せフォームを送信すると、設定したメールアドレス宛にお問い合せ内容が送信される機能です。# ゴール
railsで「お問い合せフォーム」を実装し、gmailにお問合せ内容が届くようにすること。### 完成イメージ1 (お問合せフォーム)
![スクリーンショット 2022-07-17 1.13.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/820462/7f56cc29-f213-c206-476d-8734af657f77.png)### 完成イメージ2 (設定したGmailにお問合せが届く)
![スクリーンショット 2022-07-17 1.19.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/820462/189dc51a-1d31-8753-52f8-8de308853cfc.png)