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

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

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

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

5410閲覧

ログインユーザーによって表示するページを変更したい

Takuma_Tanaka

総合スコア128

Ruby

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/09/08 08:06

ご覧頂いてありがとうございます。

###前提・実現したいこと
ログインページを設置し、ログインしたユーザーによって表示するページを変えたいと思っています。

例)ユーザー:dog → パスワード:1234
ユーザー:cat → パスワード:5678

で、dogユーザーでログインしたらdog.html.erbを
catユーザーでログインしたらcat.html.erbを表示。

###ソースコード
routes.rb

Rails.application.routes.draw do get 'dog' => 'form#dog' get 'cat' => 'form#cat' get 'form/dog_csv' => 'form#dog_csv' get 'form/cat_csv' => 'form#cat_csv' end

form_controller.rb

class FormController < ApplicationController def dog end def dog_csv @form = Dog.all respond_to do |format| format.html do @form = params[:dog] end format.csv do send_data render_to_string, filename: "dog-#{Time.now.to_date.to_s}.csv", type: :csv end end end def cat end def cat_csv @form = Dog.all respond_to do |format| format.html do @form = params[:cat] end format.csv do send_data render_to_string, filename: "cat-#{Time.now.to_date.to_s}.csv", type: :csv end end end end

dog.html.erb

<p class="t2"><strong>CSVダウンロード</strong></p> <%= link_to 'csv download', form_dog_csv_path(format: :csv), :class => 'button' %>

cat.html.erb

<p class="t2"><strong>CSVダウンロード</strong></p> <%= link_to 'csv download', form_cat_csv_path(format: :csv), :class => 'button' %>

###試したこと
http://gaku3601.hatenablog.com/entry/2014/08/24/204848
http://easyramble.com/devise-on-rails.html
http://ruby-rails.hatenadiary.com/entry/20140804/1407168000#devise-root-devise
などを見てdeviseを使えばできるのかな?と思ったのですが、IDでログインできるようにする方法は分かったものの、ID毎に開くページを切り替える方法が分かりませんでした。

また、deviseを使用せず、ログイン画面とログインユーザーのDBを作って、controllerでログインIDから開くページを指定しようと思ったのですが、その場合ログインIDとパスワードの整合性チェックをどのようにすれば良いのか分かりません。

ログイン認証とユーザーによるページ振り分けができれば、どのような方法でも構いませんので、どうすれば良いのかご教示頂けませんでしょうか?

よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ユーザー毎に表示するページを切り替える、と言う事ですが、あなたのやろうとしている方法だと、ユーザーの数だけビューをハードコーディングする、と言う事になりませんか?
であれば、設計として破綻していると思いませんか?

ログインしたユーザー毎に異なるページを表示させるのであれば、ログイン後のページを動的に生成するようにしてあげる必要があります。
どの項目をどのように動的に切り替え、生成するかが設計のポイントであり、醍醐味ではないかと思いますが。

サンプルコードから見透かす事が出来る目的は、「あるユーザーにひもづけられたCSVをダウンロードさせたい」と言う事ですが、としたら、ユーザーが特定の「Dog」なのか、「Cat」なのかをシステム側が識別する必要などないでしょう。

User has_many CsvFileという関連を引いてあげて、それをダウンロードさせればよい話です。
だとしたら、システムの「キモ」は、DogかCatかを識別してビューを切り替える事ではなく、特定のユーザーと、それに関連したCSVファイルで、それらをどう生成して、どう関連づけし、どう見せるかでしょう。

自分のやりたい事の目的**(What)をはっきり見据えて、その上で登場するオブジェクト(人物やファイル)(Who)がどう関係しているかを分類し、その上でシステム上でどうやって実現するのか(How)**をきちんと整理するべきです。
なまじっかRailsみたいなフレームワークで、簡単にシステム作成に着手出来るが故に、設計をないがしろにしてしまいがちですが、最低限、大枠の設計をしてから実装に着手するべきでしょう。

投稿2016/09/08 08:36

rifuch

総合スコア1901

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

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

Takuma_Tanaka

2016/09/12 03:57

ご回答ありがとうございます。 まだ設計が良く分かっていないことがネックということが良く分かりました。 ご回答頂いた内容も含めて勉強します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問