- 1. 初心者向け enum の導入
- 2. ==は「同値性」を、.equal?は「同一性」を判定しているらしい(Ruby)
- 3. rails new で発生したエラーについて
- 4. 100日後くらいに個人開発するぞ!day059
- 5. 【Ruby on Rails】enumの導入・日本語表記の方法
- 6. SlackでグループメンションのIDを取得したい。Webhookで必要だから。
- 7. 脱jQueryによるcocoonの使い方
- 8. 配列内の数字の合計(同じ数字を除く)再考察
- 9. enumの使用方法/使用例
- 10. pとputsの違い 〜pの罠〜
- 11. HTMLの基礎知識(詳細ページに星機能実装)
- 12. 100日後くらいに個人開発するぞ!day058
- 13. 初めてのRailsチュートリアルに挑戦!第6・7章
- 14. RubyのMix-in(ミックスイン)について
- 15. Rubyの「継承」と「オーバーライド」について
- 16. Railsのproduction.rbはどういう事が設定できるの?全ての設定を調べてみた!
- 17. [Ruby] WSL2上のUbuntuに立ち上げたDockerコンテナ内のRuby SDKをIntelliJのWSLプロジェクトでProject SDKとして扱うことは出来ません!
- 18. resourcesのネスト
- 19. Railsでプロフィール画面設定
- 20. Railsでタイトルをページごとに変化させて表示させたい
初心者向け enum の導入
既存のusersテーブルにenumを導入しようとしたら色々課題があったので記事にしました。
ユーザーの性別や年齢層をセレクトボックスで入力できる仕様にしたい。– `devise`によりログイン機能が実装されている
– 以下のusersテーブル| カラム名 | データ型 | 備考 |
|:-:|:-:|:-:|
| email | string | deviseにより導入済み |
| password | string | deviseにより導入済み |
| nickname | string | deviseに追加した |
| gender | integer | deviseに追加した |
| age | integer | deviseに追加した |# enum の設定
Userモデルにenumの定義をしていく。
“`rb:models/user
class User < ApplicationRecord devise :database_authenticatable, :registerable, :rememberable, :v
==は「同値性」を、.equal?は「同一性」を判定しているらしい(Ruby)
## はじめに
今回はRubyにおける比較演算子`==` と`.equal`の違いについて簡単にまとめてみました。
タイトルを読んでもピンと来ない方には、ある程度意味のある記事になっていると思うので読んでもらえると嬉しいです。
## 対象読者
– `==`と`.equal?`の違いを理解せずに使っている人
– 「同一性」「同値性」と言われてもピンと来ない人
## 結論いきなりですが結論です。
`==`と`.equal?`の違いは「**同値性を判定している**」か、「**同一性を判定している**」かです。
…タイトルのままですね。
あまりにも説明になっていないので、以下から詳しく解説していきます。
そもそも「同一性」「同値性」とは
– 同一性:参照値が同じオブジェクトを指していること(*1)
– 同値性:オブジェクトが同じ値を持っていること(*1)(*1 『[独習Ruby](https://www.amazon.co.jp/dp/479816884X)』から引用)
を意味しています。
具体例を使って説明します。
“`ruby
array1 = [‘a
rails new で発生したエラーについて
### __bundlerによる不具合__
今回、railsの環境構築の際にハマりかけたエラーについて備忘録としてまとめておきたいと思います。### __概要__
railsのインストール等が完了し、新規プロジェクト作成の際にrails newを行ったところエラーが発生。主なエラー表記は下記の通りとなります。
“`
(defined?(@source) && @source) || Gem::Source::Installed.new
“`調べてみると、bundleそのものの不具合のようでこの時に使用していたバージョンはBundler version 2.3.7でした。
なので、以下の手順でbundlerのバージョンアップを行い、再度新規プロジェクト作成したところ問題なく完了しました。
“`
#現在のbundleのバージョンを確認
$ bundle –version
Bundler version 2.3.7#最新バージョンへアップグレード
$ gem install bundler
Fetching bundler-2.3.18.gem
Successf
100日後くらいに個人開発するぞ!day059
## 今日はオーバーライドを学んでみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/a2131416-9a1a-43d0-4d72-a88a929766ab.png)## 今日の学び
### オーバーライド
* 親クラスにあるメソッドと同じ名前のメソッドを子クラスで定義するとメソッドを上書きすることができる
* 例
* `class Food < Menu` * : * ` def info→親クラスと同じメソッドを上書き` * : * ` end` * `end` * 子クラスのインスタンスでは子クラスで定義したメソッドを優先して呼び出すため、親クラスに同名のメソッドがある場合は上書きされた子クラスのメソッドが優先的に呼び出される ### initializeメソッドのオーバーライド * initializeメソッドも子クラスでオーバーライドできる
【Ruby on Rails】enumの導入・日本語表記の方法
# 開発環境
Rails 6.1.4
ruby 2.6.3# 目次
– gemを導入
– enumを定義する
– enumの日本語化
– enumの紐づけ
– 確認## gemを導入
まずはgemを導入します。“`ruby:Gemfile
gem “enum_help”
“`
記述後、enum_help をインストールするために `bundle install`を行いましょう。“`ruby:ターミナル
$ bundle install
“`## enumを定義する
gem導入後、実際にenumを定義し、数値と文字列を紐付けします。
今回は数値と文字列を紐づける流れを、支払い方法のクレジットカード・銀行振込を例に解説します。モデルは`Orderモデル`で定義します。
“`ruby:Order.rb
enum payment_method: { credit_card: 0, transfer: 1 }
“`## enumの日本語化
先ほど定義したenumを日本語化します。
“`ruby:config/application.
SlackでグループメンションのIDを取得したい。Webhookで必要だから。
Webhookでグループメンションの記法に関する記事はネットでいくらでも出てくるが、肝心のグループIDの取得の仕方がわからない。
ちなみに無料版ではグループ機能はないらしい。
なんか裏技的なやり方だけど、Slackをブラウザで開いて、開発者ツールで見ればできた。
ワークスペースの管理者権限とかも要らない。– アクセス→https://slack.com/intl/ja-jp/
– 該当のワークスペースの「SLACKを起動する」
– Slack.appを起動しますか?→「キャンセル」
– (フランス語で失礼!)`Cliquez sur « Ouvrir Slack » pour lancer l’application pour ordinateur.
Cela ne fonctionne pas ? Vous pouvez également utiliser Slack dans votre navigateur web.`をクリック。日本語だと`「ブラウザで開く」`とかになるのかな?
– どっかでIDを取得したいグループメンションを表示。
– 開発者ツールを開いて、グループ
脱jQueryによるcocoonの使い方
## 概要
1対多のテーブル構造において、小テーブルのフォームを複数作成するためのGem。
また、公式には、「このgemはjQueryに依存しているので、すでにjQueryを使用しているRailsプロジェクトで最も有効」とあるが、脱jQueryを実施しているプロジェクトでは[Vanilla JS版](https://github.com/oddcamp/cocoon-vanilla-js)もある。
今回は脱jQueryで実装する。
導入が違うだけで実装方法はごく普通のcocoon。## テーブル設計
投稿(post)が1に対してジャンル(genre)が多## 導入手順
まずはGemfileに追加。
“`
gem ‘cocoon’
“`CDNにて導入。
私はimportmap採用でnode.js/yarnを極力排除したので、CDNにて導入。
(他に何かいい方法があれば教えてください)
“`
“`
ちな
配列内の数字の合計(同じ数字を除く)再考察
# はじめに
前回、配列内の数字の合計(同じ数字を除く)の記事を書いたところ、コメントをいただきました。[配列内の数字の合計(同じ数字を除く)](https://qiita.com/pipiyoyoyo/items/7d3229d051302ee64d8b)
ありがとうございます!
今回はそのコメントを元に気づいた点をまとめていきたいと思います。# 環境
ruby 2.6.5# 学んだこと
私の記述した模範解答だと、線形探索で配列内の数字が多くなればなるほど負荷が大きくなるそうです。
そこで、Hashを用いる方法を教えていただきました。## 使用するメソッド
### tallyメソッド
[instance method Enumerable#tally](https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/tally.html)
“` ruby
[“a”, “b”, “c”, “b”].tally #=> {“a”=>1, “b”=>2, “c”=>1}
“`
自身に含まれる要素を数え上げた結果をHa
enumの使用方法/使用例
## 環境
・Ruby 2.6.4
・Rails 5.2.3
# enum(enumeration: 列挙)とは
・数値のカラムの対してプログラム上で別名を与える役割。
・名前を整数の定数に割り当てるのに使われるデータ型
・名前に数値を割り当てることで、コードの可読性を上げて、かつ不要な不具合を防いでくれるもの
・ActiveRecord::EnumはRails 4.1で導入された。enumの属性値はデータベース内の整数に対応付けられるが、クエリでは名前で参照できる。
・• enum型の定数は定義されている以外の値を受け付けない(例外が発生)
# 使用方法
1.usersテーブルにenum用のカラム(roleカラム,データ型はinteger型)を追加
2.userモデルにenumの定義をする
## 1.usersテーブルにenum用のカラム(roleカラム,データ型はinteger型)を追加
“`ruby
rails g migration AddRoleToUsers
“`“`ruby
class AddRoleToUsers < ActiveRe
pとputsの違い 〜pの罠〜
# pとputsの違い
**pの罠**
`p “50”`と`puts “50”`はなにが違うでしょう。正解は、出力が
> `p “50”`
> => “50”
`puts “50”`
=> 50になることです。
AtCoderなど回答を問題文通りにしないといけない場合`p “50”`だと一致しないことになります。(出力を`50`で求められている場合)
しっかり出力結果を確認して、回答するのが良さそうですね。では。
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