- 1. existsメソッドとは
- 2. 何故使おうと思ったか
- 2.0.1. rbenvと環境構築
- 2.0.2. ある日MySQLが急に動かなくなった時のデバッグ( The server quit without updating PID file )
- 2.0.3. N+1問題を回避してRubyでマスキング処理を実装
- 2.0.4. BIツール導入案件で個人情報閲覧防止のためマスキング処理を実装
- 2.0.5. 実務未経験が実務案件にトライ! その顛末やいかに?
- 2.0.6. 比較演算子と論理演算子について!
- 2.0.7. docker環境でvscodeのrubocop拡張が反応しない時の対処法
- 2.0.8. Rails の finder 系メソッドをちゃんと理解する
- 2.0.9. Ruby(Open-URI)とNokogiriでスクレイピングした際に出会ったエラー対応(404エラーのハンドリング)
- 2.0.10. 動的と静的を学ぶ!
- 2.0.11. WSL2(Ubuntu)環境下でのDockerを使ったRailsの開発環境構築するshellを作った
- 2.0.12. バリデーションメモ
- 3. uniqueness
[Ruby]10進数⇄2,3,4…16進数に変換してみる
# はじめに
本記事では、10進数⇄2,3,4…16進数に変換してみる記事です。# コード
こちらを参考にしています。
→[Ruby リファレンスマニュアル](https://docs.ruby-lang.org/ja/latest/method/String/i/to_i.html)“`ruby
p 変換したい10進数の数字.to_s(変換したい○進数の○の部分を記述)
# “変換したい進数の数が表示”p “変換したい○進数の数字”.to_i(変換したい○進数の○の部分を記述)
# 10進数に変換した数が表示
“``10進数`でないと`数値`と見なされません。
`2進数など他`では`文字列`で表現することになります。以下、実際に2~16進数に変換してみました。
“`ruby
p 255.to_s(2)
# “11111111”p 255.to_s(3)
# “100110”p 255.to_s(4)
# “3333”p 255.to_s(5)
# “2010”p 255.to_s(6)
# “1103”p 255.to_s(7)
ルーティングのネストについて!
#①.結論!
ネストは、ある記述の中に別の記述をして、親子関係を示す方法です!
「入れ子構造」とも呼ばれます!
ルーティングにおけるネストとは、あるコントローラーのルーティングの中に、別のコントローラーのルーティングを記述することです!
ルーティングをネストさせる一番の理由は、アソシエーション先のレコードの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だけを表示するようにしています。
ページネーションを作っていなければ、今回の問題に当たっていなかったので作っていてよかったと思いました。
問題としましては投稿にコメントが追加されていないのにペ
rbenvと環境構築
rbenvの個人的な疑問点を纏めたり、環境構築で引っ掛かったところをまとめた備忘録です。
# rbenvを使う理由
互換性の少ないrubyは、プロジェクトごとに色んなrubyのバージョンを使う。(常に最新版を使う訳ではないという事)
全部のrubyのバージョンをpcに入れて運用するのは大変。
そこでrbenvを使う。
# コマンド解説
“`jsx
rbenv local 3.0.2 #特定のディレクトリでこれを行うとそのディレクトリのみバージョンを指定できる
“`逆にglobalはPC全体のRubyのバージョンを指定。
“`jsx
rbenv exec gem install bundler
“`bundleコマンドはgemコマンドでインストールします。
“rbenv exec” は「システムrubyのgem」ではなく「rbenvで現在有効なrubyのgem」であることを明記する書き方。
つまり、rvenv execをつけると、rbenvのrubyバージョンに合わせたgemをインストールできる。
“`jsx
rbenv rehash # これで
ある日MySQLが急に動かなくなった時のデバッグ( The server quit without updating PID file )
#はじめに
ある日突然、rails s でエラーが発生したので解決した方法を記録します。
誰かの参考になることを祈ります。#開発環境
– macOS BigSur 11.6
– zsh: 5.8 (x86_64-apple-darwin20.0)
– Ruby: 2.6.3
– Rails: 6.1.4.1#発生したエラー
localhost:3000: ![Access denied for user ‘root’@’localhost’ (using password: NO)](https://kitsune.blog/wp-content/uploads/access-denied.png “”)“`zsh:
$ mysql.server start#出力
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/*******.local.pid).
“`
その後、brew doctor、アクセス権限の再付与、エラーログのファイルを覗いて対
N+1問題を回避してRubyでマスキング処理を実装
ある案件でRubyでマスキング処理を実装しました。本記事はその記録となります。
今回実装したのは、usersテーブルのusernameカラムとemailカラムの各フィールドをダミーデータに置き換えるというものです。イメージとしては、下の図のような感じです。
| id | username | email|
|:———–|————:|:————:|
|1 | fukuzawa yukichi| fukuzawa@gmail.com |
|2 | kimura takuya| kimura@icloud.com |
|3 |kitano takeshi | kitano@gmail.com |
|4 | suzuki ichiro | suzuki@live.com |
|5 | kataoka tsurutaro | kataoka@yahoo.co.jp |
BIツール導入案件で個人情報閲覧防止のためマスキング処理を実装
#本稿の目的
BIツール導入の実務案件を担当しました。
今回のBIツール導入案件では、「本サービス運用に影響が出ないよう、本サービス用データベースからデータを分析用に取ってくること」「分析ように取ってきたデータにマスキング処理を施し、BIツールのユーザーが閲覧できないようにすること」の2点を担保する方法を考えて実装するのが一番の山場でした。
そこで本稿では、「要件」「課題」「解決策」に分けて上記2点についての詳細かつ正確な説明を試みます。また、最後に実装したコードも掲載しております。ぜひご覧ください。
#要件
BIツールを導入するに当たって、下記の要件(クライアントの要望)を満たす必要がありました要件1. 本サービス運用に影響が出ないよう、本サービスのデータベース以外のところにBIツールが参照するようにしてほしい
要件2. BIツールの利用者(従業員)に個人情報が見えないようにusernameとemailにはマスキング処理を施してほしい
要件3. 以上をできるだけコストをかけないで実現してほしい
#課題
課題1. 要件1を満たすために、本番データベースを何らかの
実務未経験が実務案件にトライ! その顛末やいかに?
実務未経験者である私ですが、この度なんと実務案件に挑戦する機会をいただきました。その時の経験や学び、成果をここに記しておこうと思います。私と同じような境遇の人のみならず、さまざまな方にご覧いただけると非常にうれしいです。
#自己紹介
Over30の方のアラサー。未経験からエンジニアへの転職を目指しています。Techacademyでバックエンドとフロントエンド、ウェブデザインを学んだ後、Rails Tutorialやその他書籍を通じて勉強していました。今回の実務案件に参加する前は、AWS等のインフラの知見は一切ありませんでした。しかし、「30歳を過ぎている場合、最低レベルでも実務レベルじゃないとエンジニア転職できないだろう」との思いで日々学習に励んでいたところ、本案件の募集があったため即応募。熱意が認められたのか、本案件を受注することができました。
#案件の概要
運営中のWEBサービス「独学エンジニア」のKPIモニタリング体制の整備が今回の案件となります。状況を説明しますと、運用中のWebサービスであるにもかかわらずデータ分析アプリ・ツールが全く導入されておらず、新規登録者数
比較演算子と論理演算子について!
#①.比較演算子(>, >=, <, <=, ==) 比較演算子は、値同士を比較したいときに使用します! 書き方はシンプルで、値と値の間に演算子を記述するだけです! 以下のようになっています! ```php 比較演算子 使い方 説明 > A > B AはBより大きいか
>= A >= B AはB以上か
< A < B AはBより小さいか <= A <= B AはB以下か == A == B AとBは等しいか ``` 比較演算子を使った場合、その条件が正しいかどうかによって、 trueもしくはfalseと呼ばれる値になります! 下記が例となっています! ```php # 1は20より小さいか? irb(main):001:0> 1 < 20 => true# 5は5以下か?
irb(main):002:0>
docker環境でvscodeのrubocop拡張が反応しない時の対処法
# はじめに
vscode の rubocop 拡張 [ruby-rubocop](https://marketplace.visualstudio.com/items?itemName=misogi.ruby-rubocop) を Docker 環境で使用したところかなり詰まったのでその備忘録です。ホストに rubocop をインストールすれば良いという記事が散見されましたが、根本的な解決になっていません。ここではホストを汚さずコンテナ内の rubocop を参照するような解決方法をあげます。
一人でも多くの方の参考になれば幸いです。
# 何も設定していない時のエラー ( rubocop 拡張入れただけ)
“`
command /Users/horisho/.rbenv/shims/rubocop returns empty output! please check configuration.
“`
ホストに rubocop は存在しないので、 docker コンテナに実行先を向けないといけません。# 初期設定
https://github.com/misogi/v
Rails の finder 系メソッドをちゃんと理解する
# はじめに
普段空気のように finder 系メソッドを使っているけれど、改めて finder 系メソッドは何があったっけ?というのと内部実装について見ていき、何となくしか理解していない部分をちゃんと理解したいと思います。# finder 系メソッドの整理
今回は 2001/10/09 時点の最新の安定バージョン `v6.1.4.1` のソースを元に書いていこうと思います。finder 系メソッドは
– https://github.com/rails/rails/blob/v6.1.4.1/activerecord/lib/active_record/core.rb
– https://github.com/rails/rails/blob/v6.1.4.1/activerecord/lib/active_record/relation/finder_methods.rbあたりに詰まっています。
`core.rb` の方は `Person.find(1)` のようにモデルのクラスメソッドとして呼び出す場合で、 `finder_methods.rb` の方は `Pe
Ruby(Open-URI)とNokogiriでスクレイピングした際に出会ったエラー対応(404エラーのハンドリング)
## はじめに
Ruby(Rails)でWebスクレイピングをしたとき
URLが404 Not Foundになり指定したURLのリソースが見つからず、以下のエラーを出力して止まってしまって困りました。
“`
OpenURI::HTTPError
“`今回はこのエラーハンドリングの話をします。
ちなみに、Webスクレイピングで用いたライブラリやGemは、`OpenURI`と`Nokogiri`です。
### 用語の説明
**OpenURI**
– httpやftpを通じてネットワーク上のリソースを取得することができます。こちらはRuby標準のライブラリです
– こちらだけでもスクレイピングは行えますhttps://docs.ruby-lang.org/ja/2.7.0/library/open=2duri.html
**Nokogiri**
– こちらも、Webスクレイピングをサポートしてくれるやつです。こちらは、HTMLの情報を全て取得したい場合に楽に扱えます
– 特定のDOMを取得する際の 僕はよく使う`search` など、スクレイピングをする上でひつ
動的と静的を学ぶ!
Webで様々なページを見たり、サービスを利用したりすることがあります!
そこには、静的と動的という分類があります!
それぞれの特徴を書いて行こうと思います!
#①.動的
動的とは、Twitterのように、常に最新のツイートを取得し表示する仕組みや、ユーザーごとで表示されるものが変わるような仕組みです!
そのような仕組みのサービスは、動的サイトや動的コンテンツと呼ばれます!
Webアプリケーションは、動的コンテンツであることがほとんどです!
#②.静的
静的とは、誰がいつ見ても、常に同じ内容が表示されるような仕組みです!
そのような仕組みのサービスは、静的サイトや静的コンテンツと呼ばれます!
HTMLとCSSで作成したWebページは、静的コンテンツです!
#③.まとめ
どちらも簡単に言うと、
動的コンテンツとは、ユーザーごとで表示されるものが切り替わるような仕組みのこと!
静的コンテンツとは、誰がいつ見ても、常に同じ内容が表示されるような仕組みのこと!
こんな感じですね!
基本的な事なので、これはしっかり把握しておこうと思います!
なにか説明が間違って
WSL2(Ubuntu)環境下でのDockerを使ったRailsの開発環境構築するshellを作った
# 概要
初投稿です。
WSL2(Ubuntu)の環境下でDockerを使ったRailsの開発環境の記事が無くて、構築が面倒だったのでshellを作りました。## 作成する開発環境
– Ruby 3.0.2
– Rails 6.1.4
– MySQL 8.0## ソースコード
ソースコードは下記のとおりです。
[docker-rails.sh](https://github.com/sasami-pro/public_tools/tree/master/docker-rails)# 使い方
## 前提条件
– WSL2(Ubuntu)
– Docker version 20.10.8以降
– Docker Compose v2.0.0-rc.1以降## shellの実行
ディレクトリを作成しdocker-rails.shを配置します。
~~~sh
mkdir sample_app
mv docker-rails.sh ./sample_app/
~~~作成したディレクトリへ移動し、docker-rails.shを実行します。
~~~sh
cd sam
バリデーションメモ
初めてユニークネスを使ったのでメモ
uniqueness
必ず一意であること。
など、同じ情報を保存しないようにする
例)メールアドレスや電話番号など今回使った状況としては、Userは投稿を追加することができ、さらにその中で投稿に紐づく商品の情報を追加することができるようにしてるが同じ商品は追加できないようにしていた。
Postに関連する商品としていたのでPostProductモデルとする
モデルでバリデーションを仕込む“`
class PostProduct < ApplicationRecord belongs_to :user belongs_to :post validates :title, presence: true, uniqueness: true validates :image, presence: true, uniqueness: true validates :product_url, presence: true, uniqueness: true end ``` 今かけているバリデーションは、 tit
仕事で使うREDMINEに関する考察(6)
Redmineの事である。
仕事で使うということで、3か月余り検討してきたのであるが、
一つ課題があることが分かった#wiki
現状のRedmineでは、Wikiはすべてプロジェクトに依存している。
しかしながら、Wikiは共有知識であって、そもそもプロジェクトに従属するものではない。
(今のところ、PJTに従属する方が、アクセスしやすいという考えはあるが)そもそも、PJT自体が永続するものでもないし、やがて終了してしまったあとの扱いが困難である。
#やりたいこと
とりあえずWikiペディアは入り口は一つで十分であり、入り口は出来れば独立させたい。
現状の機能としては、HTML,PDFへの書き出しはあるが、別の場所にコンテンツサイトを構築するまでもない。
できればRedmineの中で、簡単にWIKIペディアを編集したい。
基本的には、階層構造を作って、全体像が見えるようにしたい。
またRedmineを会社、自宅で分けている場合には、やはりファイル形式でインポート、エクスポートしたい。
#今後の方針
現在は個人レベルでredmimeを使っているが、そのうち関