Ruby on rails 映射两个模型以使用example.com/<;名称>;

Ruby on rails 映射两个模型以使用example.com/<;名称>;,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的应用程序中有一个用户模型和一个项目模型。我希望这两个都能在http://example.com/和http://example.com//edit 如果它只是一个模型,我可以在我的路由中添加一个低优先级的匹配'/:username'条件。我该如何处理多个模型呢?这可能是个坏主意——我不建议您这样做。可能有更好的方法来满足您的需求--example.com/users/123/ 但是,如果必须这样做,您可能会创建第三个控制器,我将其称为快捷方式控制器 首先,您需要路由到快捷方式控制器,以便将:

我的应用程序中有一个
用户
模型和一个
项目
模型。我希望这两个都能在
http://example.com/
http://example.com//edit


如果它只是一个模型,我可以在我的路由中添加一个低优先级的
匹配'/:username'
条件。我该如何处理多个模型呢?

这可能是个坏主意——我不建议您这样做。可能有更好的方法来满足您的需求--
example.com/users/123/

但是,如果必须这样做,您可能会创建第三个控制器,我将其称为快捷方式控制器

首先,您需要路由到快捷方式控制器,以便将
:/name
变量传递给它进行显示和编辑。请参见本节中的布线思路

然后,在快捷方式控制器操作中,您需要有一个优先级顺序(如果用户和项目同名),首先检查与给定名称匹配的用户名,然后显示/编辑该用户名,或者查找项目,然后显示错误404

它看起来像:

def show
  if @user = User.find_by_name(params[:name])
    render 'users/show'
  elsif @project = Project.find_by_name(params[:name])
    render 'projects/show'
  else
    raise ActiveRecord::RecordNotFound, "Error message"
  end
end

无论如何,这可能是可行的,但我也不确定这是否是一个好主意,我怀疑这个想法中有很多怪癖,你必须解决。祝你好运

当一个用户被命名为一个项目,或者反过来命名时,您将如何处理?