ransackを使ったpolymorphic関連のモデルの検索処理

polymorphic関連のモデルの検索処理をransack使って書いていて、どうやるんだ?
ってなった。答えはここにあった。
http://stackoverflow.com/questions/13077954/does-ransack-support-the-same-polymorhpic-belongs-to-associations-in-its-searche

polymorphicに関してのわかりやすい説明はこちらのサイトで。

http://shirusu-ni-tarazu.hatenablog.jp/entry/2012/11/04/173742

説明にもここの情報を使わせていただきます。

1
2
3
4
5
6
7
8
9
10
11
class Image < ActiveRecord::Base
  belongs_to :imageable, :polymorphic => true
end

class Company < ActiveRecord::Base
  has_many :images, :as => :imageable
end

class User < ActiveRecord::Base
  has_many :images, :as => :imageable
end

#Imageからみた検索
# companyの名前のlike検索
f.text field :imageable of Company type name cont

#Imageからみた検索
# userの名前のlike検索
f.text field :imageable of User type name cont

polymorphic名 of 検索したいクラス名 + type + 検索対象列 + 条件
で検索できるみたい。


padrinoでコントローラ名とアクション名

sinatraもよくわからないのに、padrino触ってます。

コントローラ名とアクション名はこうやったら取れんじゃないかと

コントローラ名
request.controller.to _s

アクション名
request.action.to _s


TODOの一覧を出力したい

コード中で

# TODO ほにゃらら

って書いておけば、rake notesでTODO一覧を出力できる。

1
2
3
4
5
6
7
rake notes

app/controllers/news_controller.rb:
  * [  9] [TODO] お知らせ一覧データの有効期限の実装を行う

app/controllers/users_controller.rb:
  * [174] [TODO] デバッグ用、後で消す。

ファイアーウォールとかで守られている社内gitサーバーに置かれたgemを使いたい

弊社はgithub enterpriseで運営しています。
外部からは自由にアクセスできないように、ファイアーウォールで社内アクセスのみに接続を限定しています。

が、今やっている案件ではお客様が用意したサーバーにアクセスしなければならず。
社内gitサーバーにアクセスできない状態です。

そういった場合、capistranoでローカルにソースを先にダウンロードしてtarで固めてサーバーに送信するという指定ができます。

config/deploy.rb

1
2
set :deploy_via, :copy
set :copy_cache, true

ですが、Gemfileにか書かれているGemファイルはbundle installで入れるようなので、社内gitサーバーに置かれたgemを参照しようとしたら落ちました。

うーん。gemも一式ローカルに落としてくれんか?と探していたらありました。
rudionrails/capistrano-strategy-copy-bundled ? GitHub

Gemfileにgem ‘capistrano-strategy-copy-bundled'と書いてbundle install。

config/deploy.rb

1
set :deploy_via,    :copy_bundled

でもcap deploy:updateしたら、

1
2
3
4
5
6
7
8
executing locally: "cd /var/folders/dl/n1zf4q750msgc9jcd99hdq3c0000gn/T/20130422015014 && bundle package --all"
Error loading RubyGems plugin "/Users/gogosakrua/.rvm/gems/ruby-1.9.3-p385@global/gems/rubygems-bundler-1.1.0/lib/rubygems_plugin.rb": Could not find rubygems-bundler (>= 0) amongst [actionmailer-3.2.12, actionpack-3.2.12, active_decorato
r-0.3.4, activemodel-3.2.12, activerecord-3.2.12, activeresource-3.2.12, activesupport-3.2.12, arel-3.0.2, builder-3.0.4, cancan-1.6.9, chronic-0.9.1, chunky_png-1.2.7, coffee-rails-3.2.2, coffee-script-2.2.0, coffee-script-source-1.6.1,
compass-0.12.2, compass-colors-0.9.0, compass-rails-1.0.3, compass_twitter_bootstrap-2.2.2.2, country_select-1.1.3, erubis-2.7.0, execjs-1.4.0, fssm-0.2.10, gruff-0.3.7, haml-4.0.0, haml-rails-0.4, hike-1.2.1, i18n-0.6.4, jbuilder-1.0.2,
journey-1.0.4, jquery-rails-2.2.1, json-1.7.7, kaminari-0.14.1, libv8-3.11.8.13-x86_64-darwin-12, log4r-1.1.10, mail-2.4.4, mime-types-1.21, multi_json-1.6.1, pg-0.14.1, polyamorous-0.5.0, polyglot-0.3.3, rack-1.4.5, rack-cache-1.2, rack-
mini-profiler-0.1.23, rack-ssl-1.3.3, rack-test-0.6.2, rails-3.2.12, rails3_acts_as_paranoid-0.2.5, railties-3.2.12, rake-10.0.3, ransack-0.7.2, rdoc-3.12.2, ref-1.0.2, rjb-1.4.6, rmagick-2.13.2, rubyzip-0.9.9, sass-3.2.6, sass-rails-3.2.
6, seed-fu-2.2.0, settingslogic-2.0.9, simple_form-2.1.0, sprockets-2.2.2, therubyracer-0.11.4, thor-0.17.0, tilt-1.3.4, treetop-1.4.12, turbo-sprockets-rails3-0.3.6, tzinfo-0.3.36, uglifier-1.3.0, whenever-0.8.2] (Gem::LoadError)
    command finished in 3794ms

って怒られる。
うーん。gemsetがdefault使われてるなー。ってことで。
いい機会なので、rbenvにしてみました。
http://ksauzz.github.io/blog/2012/03/23/rbenv-ruby-build-rbenv-gemset/?

んで cap deploy:update

1
undefined method `with_clean_env' for Bundler:Module (NoMethodError)

また怒られる。なんでだ。ぐぐっても有益な情報なし。
あ、ひょっとしてbundle exec必要?

ってことでbundle exec cap deploy:update

んで行くはず。

はずって言うのも。あまりにGem一式のダウンロードが重くて、やってらんねぇってなったので。
急遽ファイアーウォールに穴開けてもらうことになったからです。

中途半端ですまんです。



applicatonControllerでイッテに例外を引き受ける

とりあえずエラー起こっても、なんとなくぼんやりとどうにかして欲しい時がある。
たとえばAPIでなんらかのエラーがあったらとりあえずステータスコードに500を返すようにしたりとか。

1
2
3
4
5
6
7
8
9
class ApiController < ActionController::Base
  rescue_from Exception, with: :system_error

  def system_error(ex)
    logger.error(ex.message)
    logger.error(ex.backtrace)
    render json: @data , :status => 500
  end
end

Exceptionを指定して、なんでもかんでもエラーが起きたらsystem _errorに投げちゃう。みたいな



tmuxはじめました

f:id:gogo  _sakura:20130228210855p:image

tmux-powerlineも入れました。

f:id:gogo  _sakura:20130228210856p:image

左側には
IPとか色々でてます。

右側には
地震速報
Gmailの受信件数
現在流れているItuneの曲名。
PC起動してからの経過時間。
メモリ使用率
東京の天気
日時

が表示されてます。

あらやだ、かっこいい。

でもなんか表示変。
あとgitのブランチがうまく表示されない

軽くデバッグしたら、パスの取得に失敗してるっぽい。

1
PROMPT="$PROMPT"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'

って.zshrcに書いてもダメ。
うーむ。

そして今日はvim-powerline入れてみました。

f:id:gogo  _sakura:20130228190240p:image

うん。かっこいい。

ターミナル越しにうっすら透けている、うちの愛犬小梅さんにも使ってもらいました。

f:id:gogo  _sakura:20130228183657j:image

・・・・・・。

満足そうです( ̄∇ ̄)


simple_formで必須に設定した時に、必須のマークを右に出す

{RAILS ROOT}/config/initializers/simple form.rbの

1
# config.label_text = lambda { |label, required| "#{required} #{label}" }

のコメントアウトを外して、左右を入れ替える。

1
config.label_text = lambda { |label, required| "#{label} #{required}" }

文言はlocaleで設定する。

1
2
3
4
5
6
ja:
  simple_form:
    "yes": 'Yes'
    "no": 'No'
    required:
      html: '<abbr title="required">[必須]</abbr>'

とっとこhaml太郎

タイトルに意味はないです。
今日はerbをhamlに一気に変換したいと思います。

1
2
#Gemfile
gem "erb2haml", :group => :development
1
2
3
4
bundle install
rake haml:convert_erbs

ERROR:  Could not find html2haml in your PATH. Aborting.

あれ?

追記

1
2
3
4
5
#Gemfile
group :development do
  gem 'html2haml'
  gem 'erb2haml'
end
1
2
3
4
5
6
7
8
9
10
11
rake haml:convert_erbs
Looking for ERB files to convert to Haml...
Converting: app/views/devise/confirmations/new.html.erb... Done!
Converting: app/views/devise/mailer/confirmation_instructions.html.erb... Done!
Converting: app/views/devise/mailer/reset_password_instructions.html.erb... Done!
Converting: app/views/devise/mailer/unlock_instructions.html.erb... Done!
Converting: app/views/devise/passwords/edit.html.erb... Done!
Converting: app/views/devise/passwords/new.html.erb... Done!
Converting: app/views/devise/registrations/edit.html.erb... Done!
Converting: app/views/devise/registrations/new.html.erb... Done!
Converting: app/views/devise/sessions/new.html.erb... Done!

うんうん。

追記
遅れましたが、Ruby2.0おめでとうございます。
とりあえずMacに入れてみました。それだけです。