Ruby on rails Rails 3.1-如何使用自定义路由正确重定向

Ruby on rails Rails 3.1-如何使用自定义路由正确重定向,ruby-on-rails,Ruby On Rails,我有一个带有“customURL”字段的页面模型。我可以在“/:customurl”上显示页面。但因为我已经在路由中定义了页面显示方式,所以我的创建操作现在会在成功时重定向到错误的路由。我应该更改什么以最干净地正确修复重定向,使其在保存时指向“/:customurl” 控制器: def create @page = Page.new(params[:page]) respond_to do |format| if @page.save format.html { r

我有一个带有“customURL”字段的页面模型。我可以在“/:customurl”上显示页面。但因为我已经在路由中定义了页面显示方式,所以我的创建操作现在会在成功时重定向到错误的路由。我应该更改什么以最干净地正确修复重定向,使其在保存时指向“/:customurl”

控制器:

def create
  @page = Page.new(params[:page])

  respond_to do |format|
    if @page.save
      format.html { redirect_to page_url, notice: 'Page was successfully created.' }
      format.json { render json: @page, status: :created, location: @page }
    else
      format.html { render action: "new" }
      format.json { render json: @page.errors, status: :unprocessable_entity }
    end
  end
end
路线:

resources :pages
...
get "/:customURL" => "pages#show"

谢谢

routes.rb
中,您可以添加魔法助手

get "/:customURL" => "pages#show", :as => :custom
然后在你的控制器里

format.html { redirect_to custom_url(@page. customURL), notice: ... }

现在,“/:customURL”需要是您的
路由中的最后一个。rb
,路由是贪婪的,第一个匹配的将得到它。因此,如果您有“/bob”之类的内容,并且有一个控制器在“/bob”上侦听,那么控制器将在页面控制器之前获取该内容。

好的,嗯,这正在使我的服务器当前崩溃。我在日志中看到了这一点:
Exiting…/config/routes.rb:18:in
block-in:“#”(NameError)的未定义局部变量或方法
custom”
请告诉我这里是否需要一个tweek,或者您是否可能需要更多代码。。。我需要添加路线助手或其他什么吗?好的,使用您所拥有的,我可以将其拼凑起来。这是对我有用的,也许可以相应地编辑你的答案?在路由中:
get”/:customURL=>“pages#show”、:as=>:pageshow
和控制器中
format.html{重定向到pageshow_路径(@page.customURL),…
对不起,这是
as::custom
。我会解决的!你能在我的评论中添加其他东西吗?如果你想使用custom而不是“pageshow”,那很酷。换句话说,就是:as=>和do@page.customURL?这对我很有效。再次感谢。当然,
:as=>:custom
as::custom
相同在较新的ruby中,ruby除了hash rocket(
=>
)之外,还添加了JSON样式(?)哈希标识符。不过,我很乐意进行调整。很高兴您能正常工作。