質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

3回答

457閲覧

link_toの中で表示しているページのURLからパラメーターを取得する

lyzmfeqpxs54

総合スコア237

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/08/29 02:14

編集2017/08/29 08:27

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suzukis

2017/08/29 03:50

現状のコントローラのコードとルーティングの設定(routes.rb)の内容を追記してください
lyzmfeqpxs54

2017/08/29 04:04

「user/xxxxx」のようなページを実行した場合、「xxxxx」部分をデータベースに照らし合わせて、その乱数が登録されていればそのユーザーページを表示するといった形です。
suzukis

2017/08/29 06:28

link_toで生成されるURLに変数を埋め込みたい、という質問かと思ったのですが、ビューの最後には<%= link_to 'csv download', "/user/#{@userenter.email}.csv" %>と言うコードがあります。質問の趣旨がよくわかりません。何がしたいのか、何は出来ていて何ができないのか、を整理して書いてもらえませんか。
lyzmfeqpxs54

2017/08/29 08:47

度々のご回答ありがとうございます。タイトルには反してしまいますが、結局やりたいことはuser/XXXXXX.csvにアクセスした際にcsvをダウンロードできるようにしたいのです。いろいろな方のご教示のもと試行錯誤していますが現状「user/XXXXXX.csv」へのルーティングはできていそうなのですがapp\controllers\user_controller.rbの「render 'user/personal'」部分でエラーが出てしまいます。直接user/XXXXXXにアクセスした場合は「render 'user/personal'」できちんと表示されるのに今回エラーが出てしまっているのがよく分かりません。
guest

回答3

0

  • routes.rb

ruby

1get "user/:id" => "user#check(.:format)", as: 'user_check'
  • view

ruby

1<%= link_to 'csv download', user_check_path(format: 'csv', id: params[:id]) %> 2 3または 4<%= link_to 'csv download', user_check_path(format: 'csv') %>

で良いのではないでしょうか?

投稿2017/08/29 07:22

mingos

総合スコア4025

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

html

1<%= link_to "csv download", request.path_info + "/index.csv" %>

でどうでしょう。
requestオブジェクトで現在処理中の情報を取得できます。

投稿2017/08/29 05:22

NCC1701

総合スコア1680

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lyzmfeqpxs54

2017/08/29 06:17

ご回答ありがとうございます。ご教示いただいた方法をためしてみたのですがNo route matches [GET] "/user/XXXXXX/index.csv"エラーが出てしまいます。 参考URLでcsvダウンロードを作った際は、ページがindexであり上に追記しましたindex.csv.rubyファイル(上に追記しました)を作成することでルーティングをせずに住んでいましたが、今回のように末尾が乱数の場合XXXXX.csv.rubyといったファイルが作れないことから何かルーティングを変更する必要があるのでしょうか。ご教示いただければ幸いです。
guest

0

ルーティングの設定は行っていますか?
http://www.rubylife.jp/rails/template/index8.html

ルールに基づいて変数を渡せばできるかと思います。

投稿2017/08/29 03:21

Ruizi_Luigi

総合スコア208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lyzmfeqpxs54

2017/08/29 03:39

ご回答ありがとうございます。 参考にしたURLのやり方の場合、ルーティングの設定を行わないような形でした。今回の場合には必要と思われるのですがそのやり方が分からず、質問させていただきました。よろしければ具体的なやり方を教えていただけないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問