不同控制器中的URL格式相同,在Rails上使用ruby

时间:2019-05-03 01:33:19

标签: ruby-on-rails url routes

我在用红宝石在铁轨上布线时遇到困难。我在不同的控制器中使用相同的url格式,并且尝试将参数发送到site controller,但将其发送到pages controller。有帮助吗?

Route.rb

resources :sites, :path => '', :except => [:index] do
  resources :pages, :path => '' do
  end
end

当我运行rails routes命令时,我得到的外观如下:

site_pages GET    /:site_id(.:format)            pages#index
site GET          /:id(.:format)                 sites#show

查看

<%= link_to 'GO', site_path(site) %>

此代码应转到site#show,但应转到pages#index,并在下面向我显示此错误消息:

 NoMethodError in PagesController#index 
 undefined method `site_id' for nil:NilClass

 Parameters:
 {"site_id"=>"site A"}

我尝试过:

<%= link_to '', site_path(site), :controller => "sites", :action => "show"%>

<%= link_to '', site_path(id: site.id)%>

但是它不起作用。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

除了@jvillian的评论之外,您的路线也无作用。

想象一个用户想用id来查看该站点。她可以输入URL my_domain.com/1。现在,她想检查该站点的页面,因此输入my_domain.com/1。 Rails怎么知道她指的是什么?

答案 1 :(得分:0)

由于页面嵌套在网站内部,因此(通常)您需要一个网站才能拥有页面。为此,请从页面资源中删除:path => ''。这将为您提供如下所示的路线:

site_pages GET    /:site_id/pages(.:format)          pages#index
site       GET    /:id(.:format)                     sites#show

然后,您每次要访问/创建其页面时都需要具有站点ID。不过请记住,如果您通过mydomain.com/anything_here之类的路线,您将被定向到sites#show动作。

相关问题