当我在浏览器中访问http://my-application.com/posts/1
时,Rails知道我正在寻找Post
id = 1
。我怎样才能让我的应用程序在内部执行此操作?即,我想要一个函数(称之为associate_with_resource
),它接受一个包含URL作为输入的字符串并输出相关的资源。例如:
>> associate_with_resource('http://my-application.com/posts/1')
=> #<Post id: 1, ... >
(我希望能够在整个应用程序中使用associate_with_resource
- 不仅仅是在控制台中)
答案 0 :(得分:1)
我想我正在寻找ActionController::Routing::Routes.recognize_path
方法
答案 1 :(得分:1)
你对ActionController::Routing::Routes.recognize_path
是正确的,我会这样做:
创建文件lib/associate_with_resource.rb
module AssociateWithResource
def associate_with_resource(path)
url_hash = ActionController::Routing::Routes.recognize_path path
url_hash[:controller].classify.constantize.find(url_hash[:id])
end
end
class ActionController::Base
include AssociateWithResource
helper_method :associate_with_resource
end
class ActiveRecord::Base
include AssociateWithResource
end
现在,您可以从几乎所有地方调用associate_with_resource(path)
来获取属于给定路径的资源
答案 2 :(得分:0)
当我在浏览器中访问http://my-application.com/posts/1时,Rails知道我正在寻找id = 1的帖子。
这不正确。
在Rails 3中,将其放入routes.rb
:
resources :posts
然后Rails会知道文件PostsController
中有一个名为app/controllers/posts_controller.rb
的控制器。 Rails还会知道,在PostsController
课程中,您有七种方法可用作行动方法:index
,new
,create
,show
, edit
,update
,delete
。
您在这些行动方法中所做的完全取决于您。您可能希望检索并显示Post
对象。