【问题标题】:Is there a nice way to use url_for with ActiveResource?有没有一种将 url_for 与 ActiveResource 一起使用的好方法?
【发布时间】:2011-01-07 20:42:39
【问题描述】:

我在我的 rails 应用程序中使用 ActiveResource 与另一个 rails 应用程序对话(两者都是 2.3.5 版)。我想链接到特定资源对象的页面,但似乎没有任何好的方法可以做到这一点。我想出的丑陋方法是在我的 routes.rb 文件中添加一行来模仿我的资源,如下所示:

# environment.rb, or in the config/environments/*.rb files
PERSON_URL = "people.example.com"

# person.rb
class Person < ActiveResource::Base
  self.site = "http://#{PERSON_URL}"
end

# routes.rb
map.resources :people # or persons, or whatever

# my_view.html.erb
<%= link_to person.name, person_url(person, :host => PERSON_URL) %>

但这很丑陋。现在,我的应用程序中出现了一条实际上并不存在的额外路线。一定有更好的方法。模型本身是否有任何线索可以为自己获取 url?有人有任何提示吗?谢谢。

【问题讨论】:

  • 我会创建一个应用程序助手来获得更简洁的代码,我看到的只是改进

标签: ruby-on-rails activeresource


【解决方案1】:

ActiveResource 不应该以这种方式使用。它的实现非常接近 ActiveRecord。根据定义,路线是本地的。如果您正在引用另一个站点,您将不再链接到此应用程序,因此正常的路线不会帮助您(很多)。

默认帮助程序仅处理命名约定。 url 助手对对象唯一要做的就是调用to_param 来获取各个资源的标识符。

我不知道有没有什么宝石可以帮助你,但我担心你必须自己做帮手。

【讨论】:

  • 我倾向于同意你对 ActiveResource 的预期用途,如果不是因为 url_for 的这一点文档:“如果你而不是哈希传递一条记录(比如Active Record 或 Active Resource)作为选项参数,您将触发该记录的命名路由。查找将在类的名称上进行。因此传递一个 Workshop 对象将尝试使用 Workshop_path 路由...“如果他们明确允许 ActiveResource 对象,我认为他们应该让它有用吗?
  • ActiveResource,就像 ActiveRecord 一样(因为 Rails 3,每个扩展 ActiveModel::Naming 的类)都会根据它们的名称生成一个链接,就像文档说的那样:“查找将发生在类的名称上。”您总是指的是您自己的对象表示,而不是原始表示。使用 ActiveRecord,您指的是您的模型,而不是它背后的数据库。 ActiveResource 也是如此。此外,它甚至不确定您的 ActiveResource 类的源是否具有 HTML 表示,它可能只是 XML 或 JSON。
  • 现在我想起来了,可能有办法绕过它,那就是通过default_url_options。这是您可以在 application_controller 中定义的方法。我不知道它是否会起作用,但可能值得研究一下。
猜你喜欢
  • 2012-08-19
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 2023-02-05
  • 2018-03-15
  • 2016-11-01
相关资源
最近更新 更多