2つ以上のthrough

モデルで以下のABCDというクラスがあって、それぞれに親子関係がある場合。

A→B→C→D

かなり適当に書くとこうやって取れる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class User_1 < ActiveRecord::Base
 has_many user_2
 has_many user_3, through: user_2
 has_many user_4, through: user_3
end

class User_2 < ActiveRecord::Base
 belongs_to user_1
 has_many user_3
end

class User_3 < ActiveRecord::Base
 belongs_to user_2
 has_many user_4
end

class User_4 < ActiveRecord::Base
 belongs_to user_3
end

User_1.user_4.first.class # => User_4

ちょっと感動したけど、普通にみんな使ってるのだろうか。

しかし、言いたいことは伝わると思うのだが、
コード適当すぎかも(–;)



Signature expired

踏み台サーバー上でcapistranoで

1
`return_or_raise': Signature expired: 20130924T043045Z is now earlier than 20130924T043046Z (20130924T043546Z - 5 min.) (AWS::ELB::Errors::SignatureDoesNotMatch)

って出て、デプロイ出来ない。

結論。
サーバーの時刻が遅れてたからでした。
はまったので、みなさんも同じことにならないように。



meat_sauce

thorとかanemoneとかselenium-driverとか使ってみたくて、ついでにgemにしてみました。
cliから一気に複数画面のスクリーンショット取ったり、リンク一覧取得したり、指定タグの中身を取得したりできるツールです(※要 ruby)

https://github.com/YoshitsuguFujii/meat_sauce

なんか勝手にブラウザとか立ち上がりますが。びびらないでください。
あと環境によっては動かないかもしれないです。ごめんなさい。
僕の環境ではFirefoxとsafariなら動きました。

インストール

1
$ gem install meat_sauce

使えるコマンドが見れます。

1
$ meat_sause

ページの全てのリンクを取得します

1
$ meat_sauce show_links --url http://www.yahoo.co.jp

 -d 数字をオプション追加でさらにリンクを踏んだ先をどんどん表示します。どんどん。

指定したタグの中身を抜き出します

1
$ meat_sauce scraping --url http://www.yahoo.co.jp --tag h2

ソースを表示します

1
$ meat_sauce show_source --url http://www.yahoo.co.jp

画面のスクリーンショットを撮ります

1
$ meat_sauce capture --url http://www.yahoo.co.jp --file-path ~/yahoo.jpg

 -d 数字をオプション追加でリンクを踏んだ先も画像を撮ります。パシャパシャ。

個人的にはスクショとスクレイピングが便利だと思うのですが。どうでしょうか?
動けばですが・・・


bunlderのデフォルトオプション

1
bundle install --without production

とか毎回オプション設定がめんどくさい。
gemrcみたいなのないのかなーと思って探してみたら答えはここにあった。
http://bundler.io/bundle_config.html

bundle config –globalでglobalな設定を見れる。
bundle config –global キー 値で設定できる。

よって

1
bundle config --global without production

ってやったら、出来た。

確認してみる

1
2
3
4
5
bundle config
Settings are listed in order of priority. The top value will be used.

without
Set for the current user (~/.bundle/config): "production"

ファイルも見てみる

1
2
3
vim ~/.bundle/config
---
BUNDLE_WITHOUT: production

できましたー。


N回injectしたいとき(数値型からinject)

2012-04-24 - なんとなく日々徒然との日記からの焼きまわし感半端ない

1
10.times.inject(0) {|sum, (i, j)| sum + i } # => 0から9までを足して、結果は45

上記を1から10足して55にしたい場合(つまり1始まりにしたい)

とりあえずこうしてみる

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
10.times.with_index(1).inject(0) {|sum, i| p i }

# =>
[0, 1]
[1, 2]
[2, 3]
[3, 4]
[4, 5]
[5, 6]
[6, 7]
[7, 8]
[8, 9]
[9, 10]
[
    [0] 9,
    [1] 10
]

ふむ。
展開させます

1
10.times.with_index(1).inject(0) {|sum, (times_count, index_count)| sum + index_count } # => 55

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