我在用红宝石在铁轨上布线时遇到困难。我在不同的控制器中使用相同的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)%>
但是它不起作用。任何帮助将不胜感激
答案 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动作。