railsがんばる子

Ruby on Railsがんばる子です。胡蝶蘭のECサイトを運営しています。

has_manyで外部キーを設定する

分析用のテーブルなどで関連を持ちたい場合、関連先のテーブルに分析用レコードのidを持たせることはとてもおかしいです。 そこで分析用のテーブルに関連先のidを保存して、関連を貼るときに使いました。

そもそも分析用のテーブルを作るのは、アプリケーションの仕様と分析が分離できていないということですが、そこは目を瞑りましょう。

class hogeAnalyze
  has_one :hoge, primary_key: id, foreign_key: hoge_id

qiita.com

RailsのURL生成ヘルパーにて、違うホストのURL+クエリストリングを生成する

RailsのURL生成ヘルパーにて、違うホストのURLを作ろうとした時に壁にあたりました。 違うホスト、かつ、クエリストリングを追加するパターンです。

hoge_tokenを付与。

> url = xxx_url(@request, {hoge_token: 111})
=> "http://localhost:3000/xxx?hoge_token=111"

> url = xxx_url(@request, {hoge_token: 111}, host: 'hogehost')
=> "http://hogehost:3000/xxx.hoge_token=111"

ハテナがドットに変わってしまいますね。 なんででしょう?

ハッシュを渡さなければ解決しました。

> url = xxx_url(@request, hoge_token: 111, host: 'hogehost')
=> "http://hogehost:3000/xxx?hoge_token=111"```

mapでrecieverを破壊するパターン

mapは新しく集合を作るメソッドだが、ブロック引数を操作するとレシーバーを破壊する

[8] pry(main)> al = [{k: 'initial_1'}, {k: 'initial_2'}]
=> [{:k=>"initial_1"}, {:k=>"initial_2"}]

# 元のデータを破壊していない
[9] pry(main)> al.map{|e|e[:k]='modified'}
=> ["modified", "modified"]

[10] pry(main)> al.map do |e|e[:k]='modified'
[10] pry(main)*   e
[10] pry(main)* end  
=> [{:k=>"modified"}, {:k=>"modified"}]

# 元のデータが破壊されている!!
[11] pry(main)> al
=> [{:k=>"modified"}, {:k=>"modified"}]

mapは新しい集合を作る関数だが、ブロック引数の変更は副作用があるようだ。

OSX 空ディレクトリに.keepを作る

find . -type d -empty -print0 |xargs -0 -I % touch %/.keep

参考ページ ありがとうございます!!

空のディレクトリをgit管理下に入れるワンライナー(empty directories) | アプレンティス プラクティス