2012-02-21 4 views
0

저는 무엇인가해야 할 일이 무엇인지 모릅니다. 내 예약 컨트롤러에서 나는이 : true를 돌려모델이 존재하지 않더라도 확인하십시오.

if Invitation.exists? 

때 '/ 이벤트/1/초대/2/예약'예상대로라고하지만, 반환 :

'Couldn't find Invitation without an ID' 

'/ 이벤트/1/reservations '도 호출됩니다. 두 번째 url이 호출 될 때 존재하는지 확인하고 @invitation 인 경우 초기화를 무시할 수있는 방법이 필요합니다.

나는 레일에 매우 익숙하기 때문에 여기있는 조언을 환영 할 것입니다.

감사

--- 편집 ---

는 내가 너무 적은 정보를 준 것 같아요.

기본적으로 내가 사용하고자하는 두 개의 URL이 있습니다 :

1 일 example.com/events/1/invitations/2/reservations을합니다 - 예약 인덱스 표시를하기 위해 주어진 초대에 속한 모든 예약 ,이 경우에는 '2'입니다.

두 번째 이벤트는 이벤트에 속한 모든 예약을 표시하기 위해 example.com/events/1/reservations입니다.

그래서 예약 컨트롤러의 index 액션에서 내가 가진 :

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

2 URL을 사용하는 경우 그러니까 기본적으로 내가 사용할 수 없습니다

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

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

과 예약에

내가 가진 인덱스를보기 '초대장'컨트롤러에서이 오류 : "ID가없는 초대장을 찾을 수 없습니다"컨트롤러에 알려주는 방법이 필요합니다. 초대장 ID가없는 경우 URL에? @ 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 메서드는 데이터가 없을 때 예외를 throw합니다. 이 동작을 원하지 않으면 find_by_* 메서드를 사용해야합니다.코드와

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

다른 문제 :

  • invitations 테이블의 모든 행이 경우 Invitation.exists? 전화가 단순히 확인합니다. 나는 그것이 당신이 원하는 것이 아니라고 생각하고 있습니다. 특정 오브젝트 존재를 확인하기 위해 입력으로 ID 또는 조건을 제공해야합니다. 자세한 내용은 exists? 설명서를 참조하십시오.

  • 다음과 같이 내가 코드를 리팩토링 것 :

를이 데이터 모델입니다 가정 :

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

뷰 코드를 수정 :

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 
이 컨트롤러 코드를 변경

@reservations 목록에 액세스하려면

<% @reservations.each do |reservation| %> 
    ... 
<% end %> 
+0

감사! 이것은 내가 정확히 필요한 것입니다 : 구체적으로 : params [: invitation_id] .present? 코딩 팁에 대해서도 감사드립니다. – user1224344

관련 문제