- 1. FinderのデフォルトテキストエディタをAtomに変更する方法
- 2. Rails アソシエーションでモデル間に1対多の関係性を持たせる
- 3. Ruby 2.7.1 で解く AtCoder ABC127 D ハッシュ
- 4. 【Rails】 gem ancestry カテゴリー機能実装について
- 5. ProgateのRuby on Railsコースの気になった所【params】
- 6. 楽天ブックス(DVD)APIで検索機能実装する
- 7. Ruby on Rails のquery attributeを使ってみる
- 8. form_withでのredirect_toについて
- 9. Rubyでアルゴリズムを実装する:Day 2 -バブルソート-
- 10. 【Rails】多対多のカテゴリー機能の実装
- 11. rails メモ化とは
- 12. Rails環境でER図自動化についての調査の共有
- 13. 【Rails】カテゴリー機能の実装
- 14. Rails paginationを実装する
- 15. リファクタリングする上でのポイント(if文)
- 16. VSCodeでRubyをフォーマットする
- 17. 【注文機能】rails 注文機能実装 確認画面も作成します〜
- 18. 11.2 アカウント有効化のメール送信: Railsチュートリアル備忘録 – 第11章
- 19. 11.1 AccountActivationsリソース: Railsチュートリアル備忘録 – 第11章
- 20. rubyのblockについて
FinderのデフォルトテキストエディタをAtomに変更する方法
システム環境設定からデフォルトテキストエディタを変更出来なかったのでやり方を調べてみました。
#手順
1.Finderから適当なテキストファイルを右クリックし「情報を見る」を選択
2.▼このアプリケーションから設定したいテキストエディタを選択(今回はAtom)
3.その下の「全てを変更」で設定完了3を飛ばせばファイルごとにエディタを選択できるみたいですね
Rails アソシエーションでモデル間に1対多の関係性を持たせる
### はじめに ###
Rails初学者の私がアソシエーションによってテーブルを関連付けた後、
アクションメソッドへパラメーターを受け渡せずに非常に苦労したので記事にしてみます。
ゴールはPlace(カフェ)にメニュー(menus)の情報を持たせて画面上に出力することです。※初投稿のため理解しがたい部分、間違っている部分等あるかもしれません。
なるべく正しい情報を記述したいと努力していますがご了承いただければと思います。
コメントでご意見等いただけましたら嬉しいです!### ひとまずPlaceとMenuのカラムを確認 ###
“`ruby
irb(main):005:0> Place.column_names
=> [“id”, “name”, “message”, “created_at”, “updated_at”, “user_id”]
irb(main):006:0> Menu.column_names
=> [“id”, “title”, “price”, “message”, “created_at”, “updated_at”, “place_id”]
Ruby 2.7.1 で解く AtCoder ABC127 D ハッシュ
# はじめに
AtCoder の過去問題の環境がバージョンアップされました。
# 今回のお題
*[AtCoder Beginner Contest D – Integer Cards](https://atcoder.jp/contests/abc127/tasks/abc127_d)*
Difficulty: 891今回のテーマ、ハッシュ
問題からは優先度付きキューなのですが、制約が緩いようでソートでも解けます。
# 解法1 ハッシュ(2.7.1)
“`ruby.rb
n, m = gets.split.map(&:to_i)
h = gets.split.map(&:to_i).tally
m.times do
b, c = gets.split.map(&:to_i)
if h.key?(c)
h[c] += b
else
h[c] = b
end
end
ans = 0
cnt = 0
h.sort{_2 <=> _1}.each do |k, v|
if cnt + v < n
【Rails】 gem ancestry カテゴリー機能実装について
# はじめに
草野と申します。
今回の投稿は、プログラミングスクールで学んだことを復習がてらにアウトプットを行います。
自分用のメモのため、文章は拙いですが、少しでも初学者の助けになればと考えています。
内容は、表題にもあるとおり、スクールで行ったチーム開発によるフリマアプリのカテゴリー機能実装についてです。未熟な点も多いと思います。不備等ありましたらご指摘ください。随時改善して行こうと思います。# 完成品
親カテゴリーが選択されるとイベント発火し、子、孫とセレクトボックスが表示されます。**商品出品時のカテゴリー登録画面**
[![Image from Gyazo](https://i.gyazo.com/2cdfbf0c9404425a2b4d6d5c2816058e.gif)](https://gyazo.com/2cdfbf0c9404425a2b4d6d5c2816058e)**商品詳細情報のカテゴリー情報呼び出し画面**
ProgateのRuby on Railsコースの気になった所【params】プログラミング未経験の初心者ですが、少し前にProgateのRuby on Railsコースを終わりました。
Railsチュートリアルをしながら復習してみると、Progateをやっていた時はあまりピンと来なかったけど、今なら少し理解できることが増えたので、気づいた点をまとめていきたいと思います。
Progateしているけど、ピンと来ていないな、ここ分からないなと思っている方のお役に立てば幸いです。# paramsとは何か【コースⅢ】
Railsコースで頻出するparamsですが、正直「わかるような、わからないような…」と思っていました。平たく言うと、
paramsはURLから送られてきた値やフォームで入力した値を`params[:パラメーター名]`で取得するメソッドです。例をあげると投稿内容の詳細ページの場合だとこのような使い方になります。
def show
@post = Post.find_by(id:params[:id])
end自分の場合、一つひとつの知識はその時には言っていることは分かるけど、記述していると知識が繋がら
楽天ブックス(DVD)APIで検索機能実装する
#はじめに
現在映画検索サービスを開発中でrails,ajaxを使って非同期通信を実装しておりました。
数日間ハマった後、ようやく実装できたので記録を残しておきます。
jqueryはハンバーガーボタン等、動きをつける時など、少し触りましたがAjaxを触るのは初めてで数日はまりました。(サーバー再起動してないためコードが反映されてないとかの関係もありました。)#環境
-rails (5.2.4.1)
-ruby (2.5.3)__楽天API__を実装する方は(__Rails__の場合)__gem__をインストールしてください。
実装手順は省きます。
詳しくは[__コチラ__](https://github.com/rakuten-ws/rws-ruby-sdk/blob/master/README.ja.md)#コントローラー処理指定
まずはじめに、検索欄に記入された内容を処理させるためにposts_contriller内のアクションを指定します。
“`ruby:routes.rb
get ‘search’, to: ‘posts#search’ #キーワードを検索した
Ruby on Rails のquery attributeを使ってみる
## 結論: blank?とpresent?の代わりにattribute名?が使える(一部気をつける必要あり)
### 背景: integerのarrayを足しあげたかった(nilの可能性があり)
元々の私のコード…
“`ruby
[ここはhogeをkeyにもつObjectの配列].reject(|obj| !obj.hoge.nil?).sum(:hoge)
“``reject(|obj| !obj.hoge.nil?)` でhogeがnilのものを取り除き、 `sum(:hoge)` でnilを取り除いたhogeを足しあげるつもりでした。
### 修正版
“`ruby
[ここはhogeをkeyにもつObjectの配列].select(&:hoge?).sum(:hoge)
“``reject(|obj| !obj.hoge.nil?)` が `select(&:hoge?)` になりました。
hoge?がtrueに評価されるものをselectするようにしました、ここが今回学んだことです。
attribute名?という表現ができることです。### 解
form_withでのredirect_toについて
# 初めに
ポートフォリオを改善しようとコード弄っていたところ、form_forを使ったままの記載を発見。
form_withに書き換えたろ、安易な考え。。。※ 本内容は以下の記事を参考にさせて頂き、問題を解決・記事を書くことにしました。
https://qiita.com/Ryoga_aoym/items/ac2918259744da128e86## 開発環境
ruby 2.5.1p57
rails (6.0.3.1)## 何が起きたか
[![Image from Gyazo](https://i.gyazo.com/78136b05e068274c51751b7aaaadf3c3.png)](https://gyazo.com/78136b05e068274c51751b7aaaadf3c3)簡単な入力フォームを作成、createを押下すると情報が登録できる
**form_for**の場合では以下の記載で実装
“`haml
= form_for @target do |f|
省略
= f.submit “Create”
“`
これを書き換えて以下の記載で
Rubyでアルゴリズムを実装する:Day 2 -バブルソート-
正直やるか迷った2日目。
1日目はこちら<[Rubyでアルゴリズムを実装する:Day 1 -ユークリッドの互除法-](https://qiita.com/Atarubift/items/4b7018c6ec8168dbc9be “Rubyでアルゴリズムを実装する:Day 1 -ユークリッドの互除法-“)>今日はバブルソートを実装する
# バブルソートとは
隣り合う数字を比較して条件に応じた交換を行うアルゴリズム
今回は数列の右側から比較して小さい順に並べるという実装を行う# bubbleSort.rb
## コード
“`rb
# バブルソートdef bubbleSort(num)
len = num.length # 数列の長さを格納
len.times do |i| # 数列の長さ分ループ
(len – 1).downto(i+1) do |j| # 数列の長さ-1~i+1までループ
if num[j] < nu
【Rails】多対多のカテゴリー機能の実装
# 目標
![ezgif.com-video-to-gif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/8224071c-70fc-f8dd-c7b3-4ec67f19d85f.gif)
# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina# 前提
下記実装済み。
・[Slim導入](https://qiita.com/matsubishi5/items/b639ffddecc626856039)
・[Bootstrap3導入](https://qiita.com/matsubishi5/items/b117c95f4dd71340cc80)
・[投稿機能実装](https://qiita.com/matsubishi5/items/1a5aeab651b5822d1f2c)
・[カテゴリー機能実装](https://qiita.com/matsub
rails メモ化とは
どうもチャンクノです!
今回は前職の同僚にメモ化というものを教えてもらったのでそれについて書こうと思います。
その同僚いわく知っていたらドヤ顔できるらしいです。
できなくても僕のことは責めないで下さい。まずメモ化ってなんだと思いますよね。
メモ化とは“`
メソッドが最初に呼び出されたときに戻り値がキャッシュされ、
それ以降、同じスコープ内でメソッドが呼び出されるたびにキャッシュされた値が返されることを意味します。
“`
とのこと。
なるほど。分からんですね。コードを見た方が手っ取り早いかもしれません。
簡単な例で書くと“`
def update
user.comment.update(comment_params)
endprivate
def user
@user ||= User.find(params[:id])
end
“`色々省いて書きましたがこんな感じです。
注目する部分は“`
@user ||= User.find(params[:id])
“`
ここですね。
||= この記述なんやねん、そう思うのではないで
Rails環境でER図自動化についての調査の共有
#はじめに
業務でER図を自動化したいという要件があってその時に調査した内容をせっかくなのでこちらでも共有したいと思います。#調査の結果
まず調査の結果からですがやはり業務で使ってるデータベースのテーブル数やカラム数はかなりの数なので正式なER図として認定するには少し難しいという結論になりました。
まあというより不必要なテーブルやカラムまで表示されてしまうので全部出力するのもそれはそれで無駄だよね。だけど今更切り分けも難しいという感じになりました。
ただローカルで確認する分には結構いい物もあったので今回共有しようかなと思うに至った所存です。#前提
どの方法も**graphviz**を使用するため、以下コマンドで**graphviz**をOSにインストールします。“`terminal
$ brew install graphviz
“`##案1 rails ERD(Gem)
個人開発レベルならこれでも全然見やすいんですけど業務で使うとなるとフォーマットが見づらくてざっくりしたテーブルの関係性しか見れませんでした。https://github.com/voormed
【Rails】カテゴリー機能の実装
# 目標
![ezgif.com-video-to-gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579893/c3f6f0a2-9d4b-0e33-c1b3-cab2aa731a35.gif)
# 開発環境
・Ruby: 2.5.7
・Rails: 5.2.4
・Vagrant: 2.2.7
・VirtualBox: 6.1
・OS: macOS Catalina# 前提
下記実装済み。
・[Slim導入](https://qiita.com/matsubishi5/items/b639ffddecc626856039)
・[Bootstrap3導入](https://qiita.com/matsubishi5/items/b117c95f4dd71340cc80)
・[投稿機能実装](https://qiita.com/matsubishi5/items/1a5aeab651b5822d1f2c)# 実装
### 1.モデル
**①カテゴリーモデル・テーブルを作成**
Rails paginationを実装する
#paginationを実装する
kaminari使ってpaginationを実装します。
gemfile にkaminariを加えてインストールしますその後kaminariの設定ファイル、テンプレートを作成します。
“`terminal
$ bin/rails g kaminari:config
$ bin/rails g kaminari:views default
“`これで設定ファイルができました。
設定ファイルを覗いてみましょういくつか書いてありますが、
config.default_per_pageで一ページあたりの件数を設定できます。“`kaminari_config.rb
Kaminari.configure do |config|
# config.default_per_page = 25
# config.max_per_page = nil
# config.window = 4
# config.outer_window = 0
# config.left = 0
# config.right = 0
#
リファクタリングする上でのポイント(if文)
## リファクタリングとは
リファクタリングとは、冗長なコードを削除したり、汎用性のある効率のいいコーディングに書き換えたりして、ソースを改善すること。## if文のリファクタリングを行うためのポイント
* if・elseの順番
* 条件式は肯定形を使う
* 単純な条件を先に書く
* ネストを浅くする**if・elseの順番**
左側には、値が変化する「調査対象」の式を右側には、値が変化しない「比較対象」の式を書くのがおすすめ。サンプル
““ ruby
if value >= 5
# 処理内容
end
““
**if/elseの場合*** 条件式は肯定形を使う
* 「!=」 より 「==」 を使う
* 単純な条件を先に書く““ruby
# bad
if a && b == 0
if c
# 処理
end
end# good
if c
if a && b == 0
# 処理
end
end
““* ネストを浅くする
ネストとは入れ子構造のこと
if文の中にif文を入れるなどして、入れ子構造に
VSCodeでRubyをフォーマットする
プログラムを書くうえで欠かせないもの(?)。フォーマット
ということで、今回はRubyで記述したものをフォーマットしようという話です。
(※mac osで操作してメモしてますので、ショートカットなどが多少異なる可能性あり)#ショートカットを実行
まずは普通にショートカットをポチッ(alt+shift+F。ctrlじゃないよ)
なんとデフォルトでrubyはフォーマットしてくれません。ちなみに自分はフォーマッタとして、Prettierをインストールしているのですが、html,js,ts,cssなどのウェブ系言語とその周辺(?)しかフォーマットできないようです。[^a]
(今気づいたけどこれphpもフォーマットしてくれないのか・・・)[^a]
【注文機能】rails 注文機能実装 確認画面も作成します〜
##【ゴール】
モデルの情報を検索できる検索窓の作成##【メリット】
■ UXの向上
■ MVC理解度向上##【開発環境】
■ Mac OS catalina
■ Ruby on Rails (5.2.4.2)
■ Virtual Box:6.1
■ Vagrant: 2.2.7##【実装】
####アプリケーション作成
※前回の「form_with」の反復練習も込めて「scaffold」封印。
※モデル、コントローラーは指定して作成しておく“`mac.terminal
$ rails new search
$ rails g model Item name:string text:text price:integer
$ rails g controller items
$ rails g model Order quantity:integer amount:integer item:references
$ rails g conrtroller orders show confirm
$ rails db:migrate
“`#### モデルを編集
11.2 アカウント有効化のメール送信: Railsチュートリアル備忘録 – 第11章
## 11.2 アカウント有効化のメール送信
### 11.2.1 送信メールのテンプレート
`rails generate`でメイラーを生成可能
(`password_reset`はあとで使う)“`
$ rails generate mailer UserMailer account_activation password_reset
“`生成物が以下
“`
create app/mailers/user_mailer.rb # ここにアクションのようなものを定義する
invoke erb
create app/views/user_mailer
create app/views/user_mailer/account_activation.text.erb # メールのレイアウト(テキスト)
create app/views/user_mailer/account_activation.html.erb # メールのレイアウト(html)
“`レイアウトにはERBが使える
11.1 AccountActivationsリソース: Railsチュートリアル備忘録 – 第11章
## 11.1 AccountActivationsリソース
### 11.1.1 AccountActivationsコントローラ
ルーティングで使用する`resouces`は`only`で限定的に使用できる
“`ruby
resources :account_activations, only: [:edit]
“`演習
> 表 11.2の名前付きルートでは、_pathではなく_urlを使うように記してあります。なぜでしょうか? 考えてみましょう。ヒント: 私達はこれからメールで名前付きルートを使います。
サーバーの外からアクセスできるパス(URL)でないと行けないのでフルパスである必要がある
`_path`が返すルート相対パスや、相対パスでは駄目[pathヘルパー(_path)が返すのは相対パス?絶対パス?: Railsチュートリアル備忘録 – Qiita](https://qiita.com/daddy_hacker/items/81bf2fdc36158c9ca1c5)
### 11.1.2 AccountActivationのデータモ
rubyのblockについて
## 概要
なんとなくdo endを使う ということは分かっている人は多いと思いますが、
procとかが出てくると少しハードルが上がるため理解していない人が多かったように思います。
そのため改めて自分の知識の整理とともに、
多くの人がrubyの文法をしっかりと理解し効率よくコーディングができるようにまとめました。## blockとは
– rubyではメソッドに対して一連の手続きを渡すことができる
– blockは `do end` もしくは ` { }` で記載する
– 引数は `|x|`のように`|`ではさんだところに通常のメソッドとかと同じように記載する“`ruby
[*1..3].each do |i|
p i
end
# => 1
# => 2
# => 33.times { |i| p i }
# => 0
# => 1
# => 2
“`## blockを使うメソッドのつくり方
– blockを実行するには **yieldを使用する** or **&blockを使用する(後述)**
– blockに仮引数を使用している場合はyieldに引数を