我陷入困境,不知道该怎么做。在我的预订控制器中,我有:
if Invitation.exists?
当按照预期调用'/ events / 1 / invitations / 2 / reservations'时返回true,但返回:
'Couldn't find Invitation without an ID'
当'/ events / 1 / reservations'被调用时,也是预期的。我需要一种方法,以便在调用第二个URL时检查它是否存在,并且如果@invitation则绕过启动。
我对rails非常陌生,所以欢迎任何建议。
由于
--- --- EDIT
我想我可能提供的信息太少了。
基本上我想要使用两个网址:
1st是example.com/events/1/invitations/2/reservations-为了让预订索引显示属于给定邀请的所有预订,在这种情况下为'2'。
第二个是example.com/events/1/reservations - 以显示属于某个事件的所有预订。
所以在预订控制器索引操作中我有:
@event = Event.find(params[:event_id])
@reservations = Reservation.all
if Invitation.exists?
@invitation = Invitation.find(params[:invitation_id])
@invite = true
else
end
在预订视图索引中我有:
<% if @invite == true%>
<% @invitation.reservations.each do |reservation| %>
...
<% else %>
<% @event.reservations.each do |reservation| %>
...
<% end %>
所以基本上如果使用了第二个URL我不能在控制器操作中使用'邀请',因为它会给出这个错误:“找不到没有ID的邀请”,所以我需要一种方法来告诉控制器是否声明如果没有邀请ID(在URL?中),请不要启动@invitation。
希望更清楚,谢谢你的帮助:)。
答案 0 :(得分: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
答案 1 :(得分:1)
您的帖子不完全清楚,但您想要这个吗?
@invitation = params[:invitation] if params[:invitation]
答案 2 :(得分:0)
find
方法在没有数据时抛出异常。如果您不想要这种行为,则应使用find_by_*
方法,即
@invitation = Invitation.find_by_id(params[:invitation_id])
您的代码存在其他问题:
Invitation.exists?
调用只是检查invitations
表中是否有任何行。我假设这不是你想要的。您必须提供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
列表:
<% @reservations.each do |reservation| %>
...
<% end %>