Ruby on rails 控制器中的钢轨全覆盖显示方法
我希望在带有脚手架的控制器构建中更改show方法。我想放在方法中的代码是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
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内容就感觉更好了?