在Rails路由中共享两个不同控制器的路径?

时间:2019-11-13 09:23:06

标签: ruby-on-rails routes

我有两个不同的控制器,其中一个叫电影,另一个叫电影文章。我真的希望它们都位于相同的路径/movies下,这样我就可以将电影标题和文章都放在相同的路径下。我只会对其中之一使用#index,但在routes.rb

中会相应地使用它
resources :movie_articles, :path => "movies", :only => [:index, :show]
resources :movies, :path => "movies", :only => [:show]

用于

之类的网址
/movies/top-10-best-mafia-movies (article)
/movies/godfather-2 (movie)

基本上,因此当Rails尝试查找“教父2”并且在movie_articles中找不到它时,它将继续在movies下查找它。我很确定这适用于root_path,但似乎不适用于这样的子路径。

有可能吗?在那种情况下应该怎么做?

1 个答案:

答案 0 :(得分:1)

“在一个路径下共享两个不同的控制器动作”是不可能的,因为rails需要决定在页面url中查找-现在应该调用哪个控制器动作?但是您可以(在任何控制器中)执行一个动作来完成此操作

def show
  @record = MovieArticle.find_by(id: params[:id]) # use find_by to don't get 404
  @record ||= Movie.find(params[:id])
end