2016-08-01から1ヶ月間の記事一覧

eval族

evalについてです。 |メソッド名|動作| |Kernel.#eval|selfが呼び出された式を評価する| |Module#class_eval|レシーバのクラスをselfとして式を評価する| |Module#module_eval|レシーバのモジュールをselfとして式を評価する| |Basic#Object#instace_eval|レ…

mysqlでcsvエクスポートする

mysqlのcsv出力です。 SELECT * FROM テーブル名 INTO OUTFILE 'hoge.csv' FIELDS TERMINATED BY ',' ←区切り文字の指定 OPTIONALLY ENCLOSED BY '"'; ←項目間の囲う文字 以上です。

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を指定するよ…