如何在控制器中获取对象的url

Chr*_*ini 19 ruby-on-rails

我有一个Product模特.

如何在控制器中获取Rails 3中产品的URL.

例如(伪代码):

def foobar
  @product = Product.first
  puts @product.url
end
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?

Sim*_*tti 31

假设Product模型映射为:routes.rb文件中的资源:

def foobar
  @product = Product.first
  url = product_url(@product)
end
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回答,如果您不希望返回完整的网址,只需注意```product_path```即可. (3认同)

Laa*_*aas 19

除了命名路由,product_url(@product)您还可以使用常规url_for(@product)(docs).这有副作用,如果您有嵌套或命名空间的路由,它会更短:

customer_product_url(@customer, @product)
url_for([@customer, @product])
Run Code Online (Sandbox Code Playgroud)

另请注意,默认情况下url_for会生成相对 URL product_path,这取决于您的需求可能是好还是坏.要获取完整的URL,请传递:only_path => false.

  • `url_for`也可以生成命名空间的URL.要实现这一点,请执行类似`url_for([:namespace,@ product])`的操作. (3认同)