2016-03-25 7 views
0

ユーザーがアカウントを作成し予約を予約する予約アプリケーションを作成しようとしていますが、アカウントを作成していないユーザーも予約を予約する必要があります。Railsはcurrent_userに応じてルーティングを入れます

これまでのところ、私はUser、Reservation、およびOrde​​rモデルを持っています。私は予約と注文の間に1対1の関係を作りました。現在、routes.rbは次のようになっています:

resources :reservations do 
resources :orders 
end 

このアソシエーションは現在私のアプリケーションで正常に動作しています。私は自分のアプリケーションでユーザーを作成してログインさせることもできますが、私はこれら2つをまだ参加させていません。

私は、ユーザーと予約の間に「has_one」という注文と一対一の関係を持たなければならないことを知っていますが、私が前進するのが難しいところでは、ユーザーリソースをどのように追加してアプリケーションの訪問者がアカウントを持っているかどうかは関係ありません。私がその方向へ行くならコントローラとルートがどうなるかわからない。私はroutes.rbをに以下を追加した場合

resources :users do 
resources :reservations do 
    resources :orders 
end 
end 

私はいつも予約を作成するためのユーザーを持っている必要があります感じています。ユーザーがログインしていないか、アカウントを持っていない場合、どうすればいいかわかりません。

解決策を探してみましたが、私の場合に役立つようなものは何も出ていません。

ガイダンスは高く評価されます。

+0

あなたが達成しようとしているかを説明することができた場合は、その後、我々は – sureshprasanna70

答えて

0

予約を作成する必要がない場合はを/usersにネストする必要はありません。これを行うにはパスに:user_idが必要です。ただ、トップレベルの両方を残す:

resources :users 
resources :reservations 

あなたのユーザーはまだURLが完全に(およびユーザー、予約、および受注のすべてで、あなたのパスはかなりなっていることを反映していない場合でも、多くの予約を持つことができます深い)。次に、アプリケーションが/reservations/users/:user_id/reservationsの両方に対応し、う

resources :users do 
    resources :reservations 
end 

resources :reservations 

:あなたは、ユーザ固有の予約指数を希望した場合、あなたはまだ、ユーザーの下であなたが既に持っている道を入れ子にルートを追加することができますそれは存在だ場合、あなたのReservationsControllerのロジックはparams[:user_id]を適用することができます。

class ReservationsController < ApplicationController 
    def index 
    scope = Reservation 
    scope = scope.where(user_id: params[:user_id]) if params[:user_id] 
    @reservations = scope.all 
    end 
end 
+0

はそんなにありがとう助けることができます!私はそのようなルートを持つことができるかどうかわからなかった!しかし、予約モデルのために.unscopedが何をしているのか説明できますか?私はそれを高く評価します。残りの部分は分かります。 – ayounis90

+0

あなたは何を知っていますか、私はそれを、クエリオブジェクトであることを保証するために、ラベルのような方法で使用していましたが、 '予約 'と'どこで 'が' all'に応答したのか、それを必要としません。その実際の目的はあなたがモデルに設定した 'default_scope'を削除することです。 –

関連する問題