includeとprependで読み込む順番の確認

includeとprependで読み込む順番を確認していきたい思います。 moduleの複数読み込みをした場合に、どのような順番で読み込まれるのかを確認していきます。 includeの順番に依存 何も考えないでincludeしていく場合は、読み込む順番に依存していることがわか…

lambdaについて

lambaはProcオブジェクトの別の書き方です。 Procオブジェクトやブロックに関してはこちらの記事をみてください。 ブロックについて - mikami's engineer diary x = lambda { 'foo' } x.call =>foo lambdaは->でも書けるので上はこのように書き直せます。 x …

クラスメソッドについて

クラスメソッドの定義を見ていきます。 class Hoge def self.hello puts 'hoge' end end Hoge.hello =>hoge これは標準的な書き方だと思います。 この時のselfはクラス自身(ここではHoge)を見ています。 class Hoge def Hoge.hello puts 'hoge' end end Hoge…

classを動的に作成する

こんなやり方をすると可読性がなくて、よくないと思うのですが、紹介します。 klass = nil FooClass = Class.new do |f|←ブロック内で定義する klass = f f == self def hello puts 'hello' end end←ここで定義終了 => FooClass x = klass.new => #<FooClass:0x007ff5330a89c8> x.hello </fooclass:0x007ff5330a89c8>…

コールバックの処理が増えてきたら、メソッド化する

コールバックの処理が増えてきて、可読性が悪くなる場合はまとまりをメソッド化にしましょう。 例えば、下記のようなものがあったとします。 before_save : hoge, :foo, :bar, .... if: :test これがどんどん膨らんでいくことは、想像できます。 なので、hog…

moduleについて

moduleについてなんとなーくでやっていたので、まとめます。 classとの違い インスタンスを生成することはできない 継承することはできない 用途 名前空間を作る モジュールのメソッドを、あるクラスのインスタンスメソッドとして取り込む モジュールのメソ…

特異メソッド

特異メソッドは、特定のオブジェクト固有のメソッドを作成することができます。 class Japanese def hello(name) puts "#{name} こんにちは" end end foo = Japanese.new foo.hello("foo") =>foo こんにちは bar = Japanese.new bar.hello("bar") => bar こ…

加工したデータのf.selectの作成方法

f.collection_selectを使いたいけど、なんか違う・・・ 少し加工したデータをセレクトで表示したいという時の方法です。 状況 選手名(Playerモデル)のデータを表示しようとしています。 first_name, last_nameとカラムが分かれている full_nameというメソッ…

ブロックについて

今までブロックについて意識することができていませんでした。 do..endもしくは{}の範囲内って認識でした。 備忘録的として書いておきます。 ブロックとは 上で説明しているようにdo..endもしくは{}の範囲内がブロックです。 languages = %w(Html PHP Ruby) …

メソッドのオーバーライド

親クラスから小クラスへと継承した際に、元のメソッドをオーバーライドすると、くさいコードが消えました。 そこで、オーバーライドについて調べました。 例 例えば、下記のようなクラスがあったとします。 class Japanese def hello puts 'こんにちは' end …

特定のcontroller配下で指定のレイアウトを使用する方法

railsでadmin配下のレイアウトはapplication.html.slimとは別のものを使用したいため、テンプレートを分けたいということがありました。 やり方 対象のcontrollerのviewをlayouts以下に作成する 特定のcontrollerの配下で使用するため、layoutsを指定するよ…

coffeescriptで引数にメソッドの返り値を渡す

メソッドの引数で、めんどくさいんで返り値にメソッドを渡せないのかなと思っていたのですが、可能でした。 javascriptでも返り値に引数にメソッドの値を渡せるんですね。 $ -> delete_submit(blog_count ->) $('[data-delete-blog-no]').on 'click', -> if(…

display: inline-blockで文字を中央に合わす方法

css

調べるのめんどくさいので書いておきます。 line-heightので中央寄せできます。 .btn-md height: 40px line-height: 40px こんな感じでheightと揃えればできます。 以上です。

disable_withで二重送信を防げ!

よくある連打されてエラーになるパターンですね。 = f.submit "送信", class: "is-button-black center__block", data: { disable_with: t("sending") } こんな感じでdisable_withをつけることで、ボタンクリック後に指定した文字に切り替わってくれます。 …

モデルのカラムが真偽値なら、?で答えを確認できるということ

便利なんですけど、パッと出ないので、忘れないために書いておきます。 notify_email: booleanこんな状況とします。 x = User.first x.notify_email? => true こういうことができます。 以上。

tryを2回使うなら、mapで繋げてみる

最近はコードを短くことにはまってます。 リファクタリング好きな人の気持ちがわかりました。 今回はtryを2回使うパターンですね。 そんなのあるか?って思いますが、ありました! 特定の子モデルのテキスト内容の長さを比較する場合などです。 user.blogs.b…

find_and_updateの書き方

最近リファクタリングにはまってます。 一行でもコードがなくなるのが楽しいです。 今回はfind & updateの方法です。 user = User.find(params[:id]) user.update(user_params) これが一般的な書き方ではないでしょうか。 一行で書く方法は二つあります。 Us…

配列指定のリファクタリング

片方が文字列で、展開式は配列をしている場合です。 同じ処理なのに、文字列を配列で処理が違うなんて・・・みたいな展開があった場合です。 文字列の処理を配列にすれば大丈夫です。 def hoge(hoge)←文字列 or 配列が入ってくる Array(hoge).each do |x| ..…

railsで特定のjsを読み込ませるようにする設定

全部は入らないから、このページだけjsを読めるようにしたい!って思うことは多いはずです。 ちなみに、自分はturbolinksを捨ててます。 イベントが発火しないとか、しんどいので・・・ 準備 まずは、application.jsから全体を読み込むような設定をなくしま…

抽出系のメソッド

抽出系のメソッドです。 select 指定するものを抽出してくれます。 x = [1, 2, 3, 4, 5, 6, 7] x.select{|x| x == 2 } => [2] reject 指定するものを拒否して、削除してくれます。 x = [1, 2, 3, 4, 5, 6, 7] x.reject{|x| x == 2 } => [1, 3, 4, 5, 6, 7] …

collection_selectにclassをつける方法

よく、promptの部分を記述しろ!みたいなこと書かれていますが、selectedの場合が書いていなかったので、書いておきます。 そもそものソースコードを見てみます。 def collection_select(object, method, collection, value_method, text_method, options = …

mysqlのexplainを使って、パフォーマンスを改善してみる

sqlのパフォーマンスで実験していたので、試した結果を載せます。 前提条件 Speakerモデルというのがあります。 テーブルの状態は下記のようになります。 show columns from speakers; +------------+--------------+------+-----+---------+---------------…

2つのカラムをくっつけて、likeで検索する方法

first_name, last_nameを二つのカラムがあるとします。 これを合わせて、両方をくっつけた場合の検索をしたい時です。 select first_name, last_name from users where type = "#{type}" AND CONCAT(first_name, last_name) like ? CONCATを使用して、カラム…

rspecのテストが読まれない原因

原因はファイル名が間違えています。 bundle exec rspec -fd -c spec/controllers/ →読まれないテストがある bundle exec rspec -fd -c spec/controllers/hoge_controller.rb →読み込まれる ファイル名が間違えているという現実 bundle exec rspec -fd -c sp…

debianにjenkinsを招待する

VPSでdebianにjenkinsを入れました。 portが空いていなくて、少し詰まったので、メモです。 iptablesという、ファイアーウォールを入れていると、ポートが解放されていません。 ポートを解放しないと、デフォルトのipアドレス + 8080にアクセスできません。 …

railsのajaxのやり方

ajaxのやり方は色々あると思うのですが、その中の一つの書き方です。 サンプルとして、commentの中の現在時刻を更新する方法をajaxで書きます。 こんなpartialがあったとします view側 comments/index.html - year = Time.now.year - month = Time.now.month…

webmockでサイト先のデータをstub化する

人のサイトからスクレイピングをしていて、データを毎回テストしている際に、サイトの内容が変更される場合があります。 予期せぬ不具合に対処が打てなくなるので、サイトの内容をstub化してくれるgemがあります。 GitHub - bblimke/webmock: Library for st…

本番環境で画像が表示されなくて困ったので、なんとかした

本番環境で画像が表示されない・・・ assetsは読み込まれているけど、画像のみ表示されない。 状況はhttp://hoge.com/public/images/sample.jpgで画像は表示されるけど、実際のpathは= image_tag /images/sample.jpgで書いており、publicが邪魔で表示されな…

railsのproductionの真っ白画面対策

無事にサーバーの設定も終わっているのに、画面が真っ白。 状況がわからないので、logにあるunicornのerror_logを確認します。 E, [2016-07-10T11:03:58.328188 #17037] ERROR -- : app error: Missing `secret_token` and `secret_key_base` for 'productio…

nginxのサブドメインでrailsの複数アプリを運用

新しいサイトを作成しているのですが、まだドメイン名も決まってないので、現在あるサイトのサブドメインでとりあえず表示確認できる場所まで運用をしようと考えました。 ここを抜かしてやってしまうと、サイトの立ち上げが出来なくて、断念する可能性があり…

capistranoの設定方法

案の定苦戦したので、設定ファイルのサンプルと対処法を載せます。 概要 deployツールで使用されています。 gitでversion管理されたものをreleases管理しているので、rollbackして戻すことができたりします。 deploy失敗した→git revertするより、まずはroll…

rbenvをupdateして、最新のrubyを取得できるようにする

最新のrubyを取得するには、rbenvを使用しているのなら、ruby-buildが入っています。 こちらをupdateしないと、rubyの最新がインストールできなかったりします。 rbenvを使用しているのなら、rbenv updateで更新したいですよね。 GitHub - rkh/rbenv-update:…

可変長引数をhashする

可変長引数でhash化することができるオプションがあります。 def hash(**k) puts "#{k}" end hash(foo: 'bar', hoge: 'hoge') →{:foo=>"bar", :hoge=>"hoge"} 普通はhash(*k)とした場合は、ただの可変長引数でいくらでも引数が入力できるという状態になりま…

rubyでクラスの型を確認

継承元を含めているかどうかを確認します。 class Hoge end class Foo < Hoge end hoge = Hoge.new foo = Foo.new ===演算子 p Hoge === hoge → true p Foo === foo → true p Hoge === foo → true is_a? p hoge.is_a?(Hoge) → true p foo.is_a?(Foo) → true …

railsのcacheを使ってみる

本番サーバーではガンガン使われているのですが、私自身がcacheを知らないので、調べました。 cacheとは 元となるデーターベースが更新されていないのに、ページ自体をリクエストが飛ぶ度に動的に作成するのは無駄になってます。 一度読み込んだページは、再…

unicornについて

unicornについてわかってなかったので、調べました。 ついでに設定ファイルを書いておきました。 間違っていたら教えてくださいm( )m unicornとは Rack webサーバーの一種です。 Rack webサーバーが何をしているかという、下記の問題を解決してくれています…

form errorで作成されるcssクラスを変更する方法

railsで自動で生成されるform errorの属性を変更したい人っている気がします。 config/application.rbで変更できるのですが、一部分だけ適用したい!って場合があると思います。 一部分だけ適用する方法です。 基本的なやり方 まずは基本的なやり方です。 co…

railsで条件つきvalidationをする方法

A, B, Cがあり、Aをしたら、B,Cがvalidationを行うという状況をしたかったです。 こんなことってありませんか? あまりないのかもしれない・・・ やり方 with_optionsを使えば特定の条件下で複数のvalidationをかけることができます。 個別で行いたい場合は…

railsのpresenceが便利という話

presenceという便利メソッドがあることを教えてもらったので、メモがてらに書いておきます。 使い方 まず、sourceコードです。 presence (Object) - APIdock def presence self if present? end present?であれば、selfを返すというシンプルメソッドですね。…

content_forで特定のページのみ使う処理をする

特定のページでjsだけ読ませたいというのは、よくあることだと思います。 そんな時のためのcontent_forというものがあります。 content_for - リファレンス - - Railsドキュメント 使い方 読み込みをさせる場所にyieldを使います。 app/views/layouts/applic…

vimのAg検索で快適な検索生活

vim

ペアプロを行っていただいて、自分のvimの使い方がダメすぎることがわかりました。 まず、検索の仕方が圧倒的に見直す課題だったので、検索の仕方をまとめました。 少し前まではatomだったので、atomで検索という、二度手間をしていました。 検索方法 Ag検索…

再帰関数について

社内勉強会で再帰関数という言葉が出たので、全く知らなかったので、調べました。 意味 関数の中で自分自身を呼び出すことです。 そのため、再帰関数と呼ばれているんですね。 サンプル 階乗計算が例にあったので、それを使います。 4 x 3 x 2 x 1こんなやつ…

モデルの双方向の関連付けをinverse_ofで整合性を保つようにする

モデルの関連付けをしているので、同じことを意味するのにobject_idが違うためにfalseになるパターンです。 モデル例 class User < ActiveRecord::Base has_many: comments end class Comment < ActiveRecord::Base belongs_to: user end こんな関連付けをし…

paper clipでurlから画像を取得する

よくある(?)urlを入力して、画像を入れるシステムです。 どうやればできるんだ?とか思っていましたが、paper clipで標準でありました。 使い方 参考 github.com 公式にすでにやり方が書いてあります。 class User < ActiveRecord::Base attr_reader :ava…

countについて

sqlが苦手な私です。 今回はcountについてです。 使い方 count(col_name) count関数は引数のcolに対しての行数をカウントしてくれます。 ただし、col_nameをつけるかどうかで動作が変わります。 mysql> select count(*) from household_account_book; +-----…

演算子をオーバーライドする

コメントでいただいたので、調べてみました。 mikamisan.hatenablog.com rubyは演算子をオーバーライド(上書き)することができるようです。 対象となる演算子 | ^ & <=> == === =~ > >= < <= << >> + - * / % ** ~ +@ -@ [] []= ` ! != !~ 上記はメソッド…

mysqlのgroup_by&havingについて

便利なグルーピングについて 前提条件 create table db_name.household_account_book (date date, expense_item varchar(20), memo varchar(100), deposit_amount integer, amount_invested integer) 前回と同じ条件です。 sqlの検索結果の加工 - mikami's e…

要素代入(=)という書き方

gemとかでこういう書き方をたまに見かけます。 def hoge=(hoge) @hoge = hoge end メソッドに=つける意味あんのか?などと思っていました。 要素代入と呼ばれるものです。 参考 ztbuz.hateblo.jp 使い方 class User def name=(name) @name = name end def na…

rubyで多次元配列を作る

多次元配列の作り方がわからなかったのですが、こうすれば作成できます。 hash = Hash.new{ |h, k| h[k] = [] } => {} hash[:foobar] = { foo: :bar} => {:foo=>:bar} hash => {:foobar=>{:foo=>:bar}} hash[:foobar] => {:foo=>:bar} hash[:foobar][:foo] =…

in?とinclude?について

in?という、ActiveSupportのメソッドが使いやすいかもしれないと思ったので、書いておきます。 自分が今やっているプロジェクトで使われていたので、調べました。 結果は同じのinclude?と比較します。 include? まずは、include?からです。 x = [1, 2, 3] y …