Ruby on rails 如何使rails应用程序显示url';s作为用户名?

Ruby on rails 如何使rails应用程序显示url';s作为用户名?,ruby-on-rails,url,routes,naming-conventions,Ruby On Rails,Url,Routes,Naming Conventions,在my Rails应用程序中,用户可以创建一个注册表,url为: http://localhost:3000/registries/3 http://localhost:3000/erinwalker 如何将该url设置为例如: http://localhost:3000/registries/3 http://localhost:3000/erinwalker 提前感谢。在我看来,这是最简单的方法 (这是一张照片) 也就是说,创建一个接受合法slug值的路由并重定向或自己查找它很容易。

在my Rails应用程序中,用户可以创建一个注册表,url为:

http://localhost:3000/registries/3
http://localhost:3000/erinwalker
如何将该url设置为例如:

http://localhost:3000/registries/3
http://localhost:3000/erinwalker
提前感谢。

在我看来,这是最简单的方法

(这是一张照片)


也就是说,创建一个接受合法slug值的路由并重定向或自己查找它很容易。

最简单的方法是在routes.rb文件的底部创建一个新路由:

match "/:username" => "registries#show"
重要的是将其放在routes.rb文件的底部,因为这将匹配格式为“/whatever”的任何路由,该格式与它前面的路由不匹配

这将指向注册表控制器的显示操作。所以在这个行动中,你可以

@user = User.find_by_username params[:username]
@registry = @user.registry

作为旁注,如果您希望自己实现这个问题,那么这个问题有很多有用的信息:友好的_id gem不适用于嵌套资源。我对Rails中的路由有点纠结。我在某种程度上理解匹配“/:username”=>“registries#show”(我使用的是designe),但为什么要更改我的控制器呢?他们都准备好了,很好。我没有意识到控制器如此连接到路由?嗯,当您使用正常路由(
/registries/:id
)时,您是通过其id(
Registry.find params[:id]
)获取注册表的。因为你不想传递它的ID,你需要根据用户模型找到它,所以你必须改变你的控制器来反映这一点。对不起,伙计,我还是个新手-它现在说:未定义的方法'find_by_username'for#。但是,从您的代码来看,Rails如何知道哪个注册表属于用户?从您的问题来看,我假设
erinwalker
是您分配给用户的用户名。在我的示例中,我假设它存储在用户表的
username
列中。对你来说,可能是其他原因。如果列名为
screenname
,则可以使用
find\u by\u screenname
。如果是
login
,您可以使用
find\u by\u login
。根据您的具体情况定制它。好的,它是Users表中的name列-所以我认为第一部分是表,第二列是,这就是为什么我说username。我还将match“/:username”=>“registries#show”更改为match“/:name”=>“registries#show”。现在,尽管它表示nil:NilClass的未定义方法“registry”。这怎么可能?非常感谢所有的帮助-学习分配。