Rails总是覆盖控制器中的show方法

时间:2017-12-10 18:12:02

标签: ruby-on-rails

我希望在使用脚手架的控制器构建中更改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。

1 个答案:

答案 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