我希望在使用脚手架的控制器构建中更改show方法。我想在方法中添加的代码是。
def show
@url_segment = params[:url_segment]
@page = Page.where( url_segment: @url_segment )
end
因此,它不使用id来获取页面,而是使用名为url_segment的字段。因为SEO的原因,我可以做http://eventpuddle.com/pages/about(而非http://eventpuddle.com/pages/1)之类的事情。
但如果我把这段代码我得到一个错误“ 无法找到带有'id'= about'“的页面,因为它仍在运行原始(我继承的猜测)代码。它显示正在运行的代码是:
def set_page
@page = Page.find(params[:id])
end
有没有办法让方法不要这样做,只运行我在show方法中放入的代码(即不运行继承的代码)。
另外我可以创建一个新的控制器和视图,但更愿意使用现有的控制器。
我正在使用rails 5.1.3。
答案 0 :(得分:0)
问题似乎与您的路线有关,如果您运行rake routes
,您需要有一条匹配get /pages/:url_segment
的路线才能使该控制器正常工作。
默认情况下,它在路由中使用:id
,因此在您的控制器中尝试:
def show
@page = Page.where( url_segment: params[:id] ).first
# ... you need to render the response still
end