2014-04-28 64 views
0

我已经清理了我的深层路线,并用浅层路线替换了它们,这要感谢大量输入。我试图找到一种自定义的方法,并且缺少连接点的东西。我的routes.rb有这些行:Rails路线为嵌套的浅层资源上的方法

resources :members, shallow: true do 
    resources :events, shallow: true do 
    get 'complete' => 'events#complete' 
    resources :items 
    end 
end 

我的目标是能够调用“事件/:ID /完整的”一个事件一个事件来完成它,做它后处理。上述航线增加了这个路线如下:

event_event_complete GET /events/:event_id/complete(.:format)  events#complete 
     member_events GET /members/:member_id/events(.:format)  events#index 
        POST /members/:member_id/events(.:format)  events#create 
    new_member_event GET /members/:member_id/events/new(.:format) events#new 
      edit_event GET /events/:id/edit(.:format)    events#edit 
       event GET /events/:id(.:format)     events#show 
        PATCH /events/:id(.:format)     events#update 
        PUT /events/:id(.:format)     events#update 
        DELETE /events/:id(.:format)     events#destroy 

目前控制器动作:

def complete 
    @event = Event.find(params[:event_id]) 
end 

我怎么想它应该是:

def complete 
    @event = Event.find(params[:id]) 
end 

好像我把它错放置或丢失东西,因为它将事件传递为:event_id而不是:id。一切正常,但似乎这是混乱,那么它应该是,所以我敢打赌,我正在做一些愚蠢的错误。

在此先感谢您的帮助!

马克

回答

1

更新您的路线如下:

resources :members, shallow: true do 
    resources :events, shallow: true do 
     member do 
     get 'complete' => 'events#complete' 
     end 
     resources :items 
    end 
    end 

这样,您将收到事件ID params[:id],而不是params[:event_id]complete行动路线。

+0

这工作就像一个魅力。再次感谢您的时间和帮助,非常感谢! – MechDog

+0

很高兴再次帮助:) –

0

做到这一点与@event = Event.find(params[:id])

resources :members, shallow: true do 
    resources :events, shallow: true do 
     member do 
     get 'complete' => 'events#complete' 
     end 
     resources :items 
    end 
    end 
+0

它和我的回答有什么不同? –

+0

我没有意识到你也发布了同样的答案。你击败我的帖子2分钟 – jimagic

+0

好吧..有时会发生。 –