Ruby on rails 控制器中的钢轨全覆盖显示方法

Ruby on rails 控制器中的钢轨全覆盖显示方法,ruby-on-rails,Ruby On Rails,我希望在带有脚手架的控制器构建中更改show方法。我想放在方法中的代码是 def show @url_segment = params[:url_segment] @page = Page.where( url_segment: @url_segment ) end 因此,它使用一个名为url\u segment的字段,而不是使用id来获取页面。因此,我可以做的事情,如(而不是)搜索引擎优化的原因 但是如果我把这个代码放进去,我会得到一个错误“ 找不到“id”=about

我希望在带有脚手架的控制器构建中更改show方法。我想放在方法中的代码是

def show
  @url_segment = params[:url_segment]
  @page        = Page.where( url_segment: @url_segment )
end
因此,它使用一个名为url\u segment的字段,而不是使用id来获取页面。因此,我可以做的事情,如(而不是)搜索引擎优化的原因

但是如果我把这个代码放进去,我会得到一个错误“ 找不到“id”=about“的页面,因为它仍在运行原始(我猜是继承的)代码。它显示它正在运行的代码是:

def set_page
  @page = Page.find(params[:id])
end
有没有办法让方法不这样做,只运行我放在show方法中的代码(即不运行继承的代码)

另外,我可以创建一个新的控件和视图,但我们更愿意使用现有的控件和视图


我正在使用rails 5.1.3。

问题似乎出在您的路由上,如果您运行
rake routes
,您需要有一个与该控制器工作的
get/pages/:url\u段匹配的路由

默认情况下,它在路由中使用
:id
,因此在控制器中尝试:

def show
  @page = Page.where( url_segment: params[:id] ).first
  # ... you need to render the response still
end

你可以这么做!试试看,你应该编辑Rails生成的代码,尤其是在本例中。我确实试过了,这就是我知道它不起作用的原因。是的,rake routes显示“page GET/pages/:id(:format)”。查找routes.rb我有“参考资料:页面”。我试着在后面将“get”pages/:section_url_segment”放在“pages#index”中,但它仍然运行相同的“继承”代码。好的,如果我注释掉“resources:pages”,我可以让它工作,但这会破坏创建的CRUD处理框架。我实际上使用的是rails_admin,但是仅仅创建一个新的控制器/视图并保留CRUD内容就感觉更好了?