Rails 3.1 / Mongoid - 如何通过名称而不是路由中的id来查找模型

时间:2011-10-10 16:12:52

标签: ruby-on-rails mongoid

编辑:我在我的数据库中使用Mongoid / MongoDB,这意味着我认为我没有得到正常的Active Record工具。

我有一个带有模型页面的简单Rails 3.1应用程序。我想将'/:customURL'与Page的show action相匹配,使用相关的:customURL。我该如何更改控制器和路线?请记住,我想保留一些来自'/ SOMETHING'的路线。例如'/ pages'仍然应该转到我的Page #index动作,而不是试图找到一个包含customURL'pages'的页面。

当前管制员:

def show
@page = Page.find(params[:id])
@title = @page.title

  respond_to do |format|
    format.html # show.html.erb
    format.json { render json: @page }
  end
end

路线:

resources :pages do
  resources :feeds
end

get "pages/index"
get "pages/show"
get "pages/new"

root :to => "pages#index"

万分感谢。

1 个答案:

答案 0 :(得分:2)

假设您的Page数据库表中包含customURL属性。在您的控制器中:

def show
  @page = Page.first(:conditions => {:customURL => params[:customURL]})
  @title = @page.title

  respond_to do |format|
    format.html # show.html.erb
    format.json { render json: @page }
  end
end

在您的路线中

resources :pages, :except => :show do
  resources :feeds
end

# Anything you want to match before the custom URLs needs to go above the next route definition
get "/:customURL" => "pages#show"    

root :to => "pages#index"