指摘事項
ハッシュの時は、両端に余分なスペースを入れない {hoge: 1} 逆に、ブロックの時は入れる hoge.each{ |item| do_something }
@hogeみたいなクラス変数をpartial templateに使うと、同じ命名のクラス変数を定義しないとそのpartial templateが使えなくなってしまうので、やめたほうがいいです。 やってしまって、恥ずかしいです。
[初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか - Qiita [初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか - Qiita
中間テーブルは基本、多対多のモデルの関連をつくるために用いているので、 中間テーブル自体は意味のあるデータを持つことは少ない。 XyzToAbcというモデル名を見ると、「中間テーブル」だと推測できます。
関数を定義する際、渡された引数はなるべく変更しないようにする。 イミュータブルな関数を作りなさい。ということですね! 副作用はよろしくないです、はい。
似た様な用語がたくさんあったり、時と場合により用語が変わってる場合(ほとんどの場合が気分で変わっている)、用語集を提案するとよい。
def self.availables where(available: true) end scope :availables, -> { where(available: true) } scopeチェーンできるもの(ActiveRecord::Relationが返るもの)はscopeで、 Relation以外の戻り値を返すものは、クラスメソッドに整理しておけば、 新しく…
名前検索と、条件検索はメソッド分ける。 def search(conditions = {}) if conditions[:name].present? where(name: :name) else where(status: :status) end end def search_by_name(name) where(name: name) end def search_by(conditions = {}) where(con…
@hoge.begin_date=params[:begin_datetime] ではなく、 @hoge.begin_date=params[:begin_date]
railsでupdateを実装してリリースしたところ、既存機能が動かなくなるバグを出してしまった。 原因はconfig/routes.rbでした。 config/routes.rb resources :foos, only: [:index, :create, :update] #<- ここにupdateを足しました。 patch 'foos/bar' route…
メモリ上にたくさんクラスができるから?らしい。 そういうのってJavaではgaverage collectionの対象になってた気がするけど、rubyではならないので自分で気にしてあげなきゃいけないってこと? でも、それだと色々なクラスでやばいことになりそうだが...
メモ。 Blog Alpha Networking: Rubyのメタプログラミング技術
begin ... do something rescue NanikaError=> e logger.error(e) .. do something end
xxx_helper.rb def help(status) nanika = @nanika.where(status: status) .... end これだと、キャッシュされたActiveRecord::Relationを利用せずにまたSQLを投げてしまう なので、rubyのfindを使ってみた。 これでいいのか謎だけど、とりあえずSELECTが発…
インスタンスに対する操作というより、集合の取得処理はクラスメソッド(def self.xxx)にする model.rb インスタンスメソッドで書く場合 class Model def find_one Model.find(1) end end ではなく、 クラスメソッドで書く class Model def def.find_one Mod…
sort_by &:id ではなく sort_by(&:id)
+ def something + do something .... + do something .... + do something .... + end + + ではなく、 + def something + do something .... + do something .... + do something .... + end +
a,b,c ではなく、 a, b, c
case plan when :plan_a ...do something when :plan_b ...do something end ではなく case plan when :plan_a ...do something when :plan_b ...do something end
"key" => "value" ではなく key: "value
"search.#{ name }" "search.#{name}"
begin .... rescue e => logger.error(e) .... end
CSV.foreach(Rails.root.join('a', 'b', 'c', 'data.csv')) do |record| path = Rails.root.join('db', 'b', 'c', filename='data.csv' ) CSV.foreach(path) do |record|
Railsではmoduleが自動読み込みされるのでrequireが不要。 Rails では、自動読み込みは RAILS_ROOT/app/models のような RAILS_ROOT/app/ の中のディレクトリに対し行われます。 RAILS_ROOT/lib とかに配置しても自動読み込みされません。 Rails の自動読み…
dependent: :destroyを付けるかどうかを考えること
(0..6).each{ |weekday_type| ...something ...something ...something } 複数行のeach はブロックではなく (0..6).each do |week_type| ...something ...something ...something end