2012-02-21 14 views
0

私は何かに取り残され、何をすべきか分かりません。お客様のご予約コントローラでは私が持っている:モデルが存在しない場合でもチェックする

予想通り、呼び出されたときに '/イベント/ 1 /招待状/ 2 /予約' trueを返す
if Invitation.exists? 

が、リターン:

'Couldn't find Invitation without an ID' 

「/イベント/ 1/reservations 'が呼び出されます。 2番目のurlが呼び出されたときにそれが存在するかどうか、@invitationの場合は開始をバイパスするための方法が必要です。

私は非常にレールに新しいので、ここのアドバイスは歓迎されるでしょう。

おかげ

--- EDIT ---

私はあまりにも少ない情報を与えているかもしれないと思います。

は基本的に私が使用する2つのURLがあります。

第一はexample.com/events/1/invitations/2/reservationsのである - 予約インデックス表示を持つために与えられた招待状に属しているすべての予約、この場合は「2」となります。

第2はexample.com/events/1/reservationsで、イベントに属するすべての予約を表示します。私が持っている予約コントローラのindexアクションでそう

:だから、基本的に第二URLが使用されている場合、私は使用することはできません

<% if @invite == true%> 
    <% @invitation.reservations.each do |reservation| %> 
    ... 
<% else %> 
    <% @event.reservations.each do |reservation| %> 
    ... 
<% end %> 

@event = Event.find(params[:event_id]) 
@reservations = Reservation.all 

if Invitation.exists? 
    @invitation = Invitation.find(params[:invitation_id]) 
    @invite = true 
else 
end 

と予約では、私が持っているインデックスを表示します「招待状」がコントローラのアクションに「IDなしで招待状を見つけることができませんでした」というメッセージが表示されるので、招待状IDがない場合はコントローラに通知する必要があります。 @invitationを開始する。

明確だ希望、助けてくれてありがとう:)

答えて

1

あなたが代わりにあなたは、おそらく期待しているものであるモデルの実際のインスタンスのこちらのモデルの定数を使用しています。

@invitation = Invitation.find(params[:id]) 

さらに、招待状が見つかったら続行してください。

- 編集 -

私はあなたがここでやろうとしているものを手に入れると思います。試してみてください:

def index 
    @event = Event.find(params[:id]) 
    @invitation = Invitation.find(params[:invitation_id]) if params[:invitation_id] 
    @reserations = Reservation.all 
    ... 
end 
+0

返信ありがとうございますが、URL 2経由でアクセスするときに問題を引き起こす「招待状」をまだ参照していますが、編集を参照してください。 – user1224344

+0

あなたの編集に返信するには、私の編集を参照してください。 – Veraticus

+0

自分の返信を編集していただきありがとうございます。誰もがウッドチャック臭い? – user1224344

1

あなたの投稿は完全にはっきりしませんが、これは欲しいですか?

@invitation = params[:invitation] if params[:invitation] 
0

findメソッドはデータなしで例外をスローします。この動作を望まない場合は、find_by_*メソッドを使用する必要があります。あなたのコードで

@invitation = Invitation.find_by_id(params[:invitation_id]) 

その他の問題:

  • invitationsテーブル内に行があるかどうInvitation.exists?呼び出しは単にチェックします。私はそれがあなたが望むものではないと仮定しています。特定のオブジェクトの存在を確認するために、入力としてIDまたは条件を指定する必要があります。詳細はexists?のドキュメントをご覧ください。次のように

  • 私はあなたのコードをリファクタリングします:

が、これはあなたのデータモデルであると仮定すると:

class Event 
    has_many :reservations 
    has_many :invitations 
end 

class Reservation 
    belongs_to :event 
    belongs_to :invitation 
end 

class Invitation 
    belongs_to :event 
    has_many :reservations    
end 
は、コントローラのコードを変更し

@event = Event.find(params[:event_id]) 
@reservations = if params[:invitation_id].present? 
    (@invitation = @event.invitations.find([:invitation_id])).reservations 
else 
    @event.reservations 
end 

は、ビューのコードを変更します。 @reservationsのリストにアクセスする:

+0

ありがとう!これはまさに私が必要としたものです:具体的には: params [:invitation_id] .present? とコーディングのヒントもありがとうございます。 – user1224344

関連する問題