niki12260714の日記

フリーランスのITエンジニアの呟き。

Ruby学習19日目:url_forで現在のURL取得

意外に詰まったのと、多分もっと簡単な書き方があると思うので、いつか直したいメモとして残しておきます。

取り置き依頼申請画面のURLは「http://xxxx/request/(アイテム作成者を示すパラメータ)/(アイテムのID)」とします。
理由は、アイテムIDは連番になるので、「http://xxxx/request/7」とかでアクセス可能にすると、ユーザーがURLの7の部分を書き換えて、簡単に他のアイテム取り置き依頼画面にアクセスできてしまうので。

※厳密にアクセス制御するならばもっと方法があると思いますが、自分が目指しているのは「メールアドレスがあれば取り置き依頼ができる簡便性」「URLが分かっていれば取り置き依頼画面にアクセス可能」という理念があります。
なので、この理念を尊重しつつ、イタズラを排除する方法を取っているのです

さて、取り置き一覧画面→取り置き依頼申請画面に遷移するときに、このURLをlink_toに渡さなければいけないのですが、そのためにはViewが現在のURLを知らねばなりません。

url_for :only_path => false

これで現在のURL、すなわち「http://xxxx/request/(アイテム作成者を示すパラメータ)」が取得できます。
このURLに続けて「/(ID)」を付与するので、

@url_path = url_for :only_path => false
@url_path = @url_path + '/' + item.id.to_s

これで目的のURLを取得できるので、link_toタグでリンクを生成。

……いや絶対、こんな回り道した書き方じゃないのがあると思う……。