【发布时间】:2011-12-27 09:20:31
【问题描述】:
我似乎无法设置自定义 URL。所有 RESTful 路由都可以正常工作,但我无法弄清楚如何简单地将 /:unique_url 添加到我在模型中创建的现有路由(一个简单的 4 个字符的随机字符串)并将用作各种“永久链接” .
Routes.rb
resources :treks
match ':unique_url' => 'treks#mobile'
控制器
.
.
def mobile
@trek = trek.find(params[:id])
end
这是因为我试图在现有资源上定义自定义操作吗?我不能在具有资源的控制器上创建自定义方法吗?
顺便说一句,当我将 routes.rb 更改为 match 'treks/:id/:unique_url' => treks#mobile 时,它工作正常,但我只想将 url 简单地设为 /:unique_url
更新 看来find_by_[parameter] 是要走的路……
我一直在玩控制台,但我似乎无法找到任何方法来提出...例如,我可以运行Trek.last.fullname,但无法运行@trek = Trek.last...然后调用... @trek.lastname 例如。任何线索为什么?我认为这是我的问题。
【问题讨论】:
-
您的
mobile方法使用params[:id],但您的路线中没有:id。您需要在模型中创建一个find_by_unique_url方法(如果您还没有)并在您的mobile方法中使用它。 -
谢谢马克,我在哪里创建这个方法?
-
如果您有
unique_url字段,那么您已经拥有它。在 Rails 控制台中,您可以执行Trek.find_by_unique_url(url),其中url是匹配的 unique_url,您会看到结果。 -
当我在控制台中运行它时,它显示未定义的方法...我认为似乎无法让
find_by_unique_url工作。它必须在我的模型中的某个地方吗? -
@MarkThomas 你能看看我的更新吗...我认为这可能是问题的原因...谢谢!
标签: ruby routing controller ruby-on-rails-3.1