2012-02-21 59 views
0

我被困在某物上,不知道该怎么做。在我的预订控制器我有:检查模型是否存在,即使它不存在

if Invitation.exists? 

返回true时 '/事件/ 1 /请柬/ 2 /预订' 叫,符合市场预期,但回报:

'Couldn't find Invitation without an ID' 

当“/事件/ 1 /保留“被调用,也是预期的。我需要一种方法来检查当第二个URL被调用时是否存在,并且为了绕过@invitation的初始化。

我对轨道很陌生,所以在这里的任何建议都会受到欢迎。

感谢

---编辑---

我想我可能已经给的信息太少。

基本上有两个网址我想用:

月1日是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 %> 

所以基本上如果使用第二个网址,我不能使用控制器操作中的'Invitation',因为它给出了这个错误:“无法找到没有ID的邀请”,所以我需要一种方法告诉控制器是否存在声明,如果没有邀请ID(在URL中)?don'启动@邀请。

希望这是更清楚的,感谢您的帮助:)

回答

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 2012-02-21 22:04:24

+0

查看我的编辑以回复您的编辑。 – Veraticus 2012-02-22 00:23:45

+0

感谢您对我编辑的回复进行编辑。有人闻到土拨鼠? – user1224344 2012-02-22 06:08:24

1

你的帖子还不完全清楚,但是你想要吗?

@invitation = params[:invitation] if params[:invitation] 
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 %> 
+0

谢谢!这正是我所需要的,具体如下: if params [:invitation_id] .present? 也感谢编码技巧。 – user1224344 2012-02-22 06:09:09