has_manyで外部キーを設定する
分析用のテーブルなどで関連を持ちたい場合、関連先のテーブルに分析用レコードのidを持たせることはとてもおかしいです。 そこで分析用のテーブルに関連先のidを保存して、関連を貼るときに使いました。
そもそも分析用のテーブルを作るのは、アプリケーションの仕様と分析が分離できていないということですが、そこは目を瞑りましょう。
class hogeAnalyze has_one :hoge, primary_key: id, foreign_key: hoge_id
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"```
urlを生成するときに、ホストを変える
xxx_url(host: host_name)
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) | アプレンティス プラクティス