プログラミングとかときどきビジネスとかとかアジアとか

自分のための技術的なメモがメインです。RailsとかJavascriptとかサーバ周りとか。マークダウンとかわかりません。

URL取得関連

たまにURLにパラメータじゃなくて#がついてるときあるじゃないですか。

http://hoge.com/#fuga=fuu

みたいなあれ。

あれをRubyで取得しようといろいろ試しました。

方法1

url_for()を使う

url_for()は現在のurlを返す関数ですが、引数無しだとパラメータも何も取ってきてくれない。

なのでパラメータが欲しいときは、 url_for(params) とする。

しかし!アンカーは取れず。

方法2

requestを使う

request.url とかrequest.path_infoとかいろいろありますが、 結局これでもアンカーは取れず。

なんでやねんと悩んだ結果、アンカーはサーバに送られてないらしい。 知らなかった、、、、

というわけでJSで取るしかないみたいです。 location.hash こんな便利メソッドでサクっと取りつつsplit('=')とかでほげほげしましょう。

そんじゃーね

【Rails】n:nのリレーション

ItemテーブルとTagテーブルがn:nの関係。

モデルのscopeでごにょごにょしたりするのはスマートじゃないので、 Railsっぽく has_and_belongs_to_many という長ったらしい呪文を使う。

【準備】 中間テーブルの作成。

class CreateItemsTags < ActiveRecord::Migration def change create_table :items_tags, :id => false do |t| t.column :item_id, :integer t.column :tag_id, :integer end end end

■注意 - id => false - timestamp消す - 外部キー列が [modelname]id - テーブル名が参照先のテーブル名(複数形)をで繋げたもの - 連結順が辞書順

...なんてめんどくさい!

あとはそれぞれのmodelでhas_and_belongs_to_manyを指定。

tag.rb

has_and_belongs_to_many :items

item.rb

has_and_belongs_to_many :tags

【使い方】 @hoge = Item.find(100) @hoge.tags