link_toの中で現在表示しているページのURLからパラメーターを取得し、変数として使用したいのですが、調べてもわからず、こちらで質問させていただきました。
現在表示しているページは「/user/XXXXXXXX」のような形でX部分はランダムに文字を生成したものとしています(ユーザーごとのページのような感じです)。このページごとにデータベースがあり、それをcsv形式でダウンロードしようとしています。
下記ページを参考にurlが固定であればcsvとしてダウンロードできたのですが、ページのURLに変数が含まれている場合どのようにすればよいのでしょうか。
http://qiita.com/oharato/items/414b7e5a61034bf8311c
ご教示いただければ幸いです。
よろしくお願いいたします。
Ruby
1 2表示ページは「/user/XXXXXXXX」でXXXXXXXXを取得し 3以下のような形で変数部分にXXXXXXXXを入れたいと考えています。 4 5<%= link_to 'csv download', '/user/変数/index.csv' %> 6 7
Ruby
1 2# app\controllers\user_controller.rb 3 4def check 5 # @idnihaURL末尾の8桁のランダム文字列が格納される(ex. TFMIQWYM) 6 @id = params[:id] 7 @user = User.exists?(email: @id) 8 if @user 9 @userenter = User.find_by(email: @id) 10 # @maildbs = Maildb.all 11 @maildbs = Maildb.paginate(page: params[:page], per_page: 10) 12 13 14 respond_to do |format| 15 format.html 16 format.csv do 17 filename = 'maildbs' 18 headers['Content-Disposition'] = "attachment; filename=\"#{filename}.csv\"" 19 end 20 end 21 22 23 render 'user/personal' 24 return 25 else 26 render plain: "存在しないページ" 27 return 28 end 29 end 30 31 32 33 34# routes.rb 35 36get "user/:id" => "user#check" 37 38 39 40 41 42 43# app\views\user\personal.html.erb 44 45<% @maildbs.each do |maildb| %> 46 <div class="maildbs-index-item"> 47 <div class="maildbs-right"> 48 <%= maildb.date %> 49 <%= maildb.time %> 50 <%= maildb.xxxx %> 51 <%= maildb.xxxx %> 52 </div> 53 </div> 54<% end %> 55 56<!-- 各ページへのリンク --> 57<%= will_paginate @maildbs %> 58<!-- @userenter.emailには乱数が格納されている --> 59<%= link_to 'csv download', "/user/#{@userenter.email}.csv" %> 60 61 62 63 64 65# app\views\user\index.csv.ruby 66 67require 'kconv' 68columns = [:name, :email, :to, :cc, :bcc] 69res = "" 70res << columns.map{|c| User.human_attribute_name c }.join(',')+"\r" # header 71@users.pluck(*columns).each do |u| 72 res << u.join(',')+"\r" # body 73end 74res.tosjis 75 76 77
現状のコントローラのコードとルーティングの設定(routes.rb)の内容を追記してください
「user/xxxxx」のようなページを実行した場合、「xxxxx」部分をデータベースに照らし合わせて、その乱数が登録されていればそのユーザーページを表示するといった形です。
link_toで生成されるURLに変数を埋め込みたい、という質問かと思ったのですが、ビューの最後には<%= link_to 'csv download', "/user/#{@userenter.email}.csv" %>と言うコードがあります。質問の趣旨がよくわかりません。何がしたいのか、何は出来ていて何ができないのか、を整理して書いてもらえませんか。
度々のご回答ありがとうございます。タイトルには反してしまいますが、結局やりたいことはuser/XXXXXX.csvにアクセスした際にcsvをダウンロードできるようにしたいのです。いろいろな方のご教示のもと試行錯誤していますが現状「user/XXXXXX.csv」へのルーティングはできていそうなのですがapp\controllers\user_controller.rbの「render 'user/personal'」部分でエラーが出てしまいます。直接user/XXXXXXにアクセスした場合は「render 'user/personal'」できちんと表示されるのに今回エラーが出てしまっているのがよく分かりません。