2017-09-23 16 views
0

是否有建立一个更好的方法下面这两条路线:建立路线的更好方法?导轨

post '/song:id/favorite', to: 'songs#favorite', as: :favorite 
    delete '/song:id/favorite', to: 'favorites#destroy', as: :destroy 

这里都是我的路线:

Rails.application.routes.draw do 
    root "home#index" 
    get '/login', to: 'sessions#new' 
    post '/login', to: 'sessions#create' 
    delete '/logout', to: 'sessions#destroy' 

    post '/song:id/favorite', to: 'songs#favorite', as: :favorite 
    delete '/song:id/favorite', to: 'favorites#destroy', as: :destroy 

    namespace :admin do 
    resource :dashboard, only: [:show] 
    end 

    resources :users, only: [:new, :create] 
    resources :playlists 
    resources :genres 
    resources :albums 
    resources :artists 
    resources :playlist_songs 
    resources :favorites 
    resources :songs 

end 
+0

在我看来,你可以尝试实现像在[这个答案](https://stackoverflow.com/a/24306086/6873497) 。我认为你现在的设计可以调整为使用简单的CRUD操作。 – matiss

+0

谢谢@matiss!我的设计是根据你的建议创建的:)我的问题基本上是,有什么问题,我的当前路线是如何设置的,还是有更好的方法来做到这一点? p.s我是菜鸟 – Kurta

回答

0

尝试是这样的

resources :songs do 
    member do 
    post 'favorite', to: 'songs#favorite', as: :favorite 
    delete 'favorite', to: 'favorites#destroy', as: :destroy 
    end 
end 
0

这些行动不要真的不属于歌曲控制器。考虑一下,它不会为歌曲做一个CRUD动作(你不会创建,编辑或删除歌曲)。

我会使用一个叫做嵌套资源的概念(http://blog.8thcolor.com/en/2011/08/nested-resources-with-independent-views-in-ruby-on-rails/ - 这是一个很好的介绍)。

基本上,我会组织我的路线为:

resources :songs do 
    resources :favourites, only: [:create, destroy] 
end 
+0

谢谢Cionescu ..但是我的歌曲最喜欢的是歌曲控制器,并且销毁是在收藏夹控制器中。你是在说我把他们全部放在最爱的控制器中,然后根据你的结构重新排列我的路线?顺便说一句。我用阿贾克斯把歌曲当作最爱。谢谢! – Kurta

+0

是的,这是我的建议。 Ajax应该不成问题。你也可以使用Rails的UJS,它可以很好地与路由助手一起工作 – cionescu