我已经看到了一些类似的问题:
How to set the default format for a route in Rails?
Rails 3 respond_to: default format?
Rails 3.1 force .html instead of no extension
但是对于我来说,任何解决方案都无法在rails 4中运行:
routers.rb
中的
:defaults => { :format => 'html' }
app/controllers/some_controller.rb
中的
before_filter :set_format
def set_format
request.format = 'html'
end
config/application.rb
中的
config.default_url_options = { :format => "html" }
任何一个。我尝试了所有这些并且各自分开。
这是我的代码:
link_to("Read more", article_path(article, :format => "html"))
# => <a href="/1.html">Read more</a>
如果我删除:format => "html"
将会是什么:
link_to("Read more", article_path(article))
# => <a href="/1">Read more</a>
我想要的是什么:
link_to("Read more", article_path(article))
# => <a href="/1.html">Read more</a>
请分享您的建议。
答案 0 :(得分:1)
如果您使用将这些选项添加到路线中,我认为您最终会在路径中找到.html
。您甚至不需要修改对article_path
的调用。
format: true, defaults: { format: 'html' }
我遇到了类似的事情。浏览Rails routing docs帮助我找到答案。
我有一项操作,我想默认为CSV格式,但我还想生成其中包含.csv
的网址。通过这种方式,客户端可以通过查看URL来判断它是否为CSV。如果没有.csv
,那么链接的内容就不太清楚了。
我的路线是这样的:
get 'customers/with_favorite_color/:color' => 'customers#with_favorite_color', as: :customers_with_favorite_color, format: 'csv'
我正在生成这样的链接:
customers_with_favorite_color_url(color: 'blue', format: :csv)
# => `http://localhost:3000/customers/with_favorite_color/blue
除此之外,我想要http://localhost:3000/customers/with_favorite_color/blue.csv
。
如果在路由中也指定了该格式,则似乎不会将格式添加到URL中。
为了实现这一点,我将路线改为
get 'customers/with_favorite_color/:color' => 'customers#with_favorite_color', as: :customers_with_favorite_color, format: true, defaults: { format: 'csv' }
请注意,添加/更改的选项为:format: true, defaults: { format: 'csv' }
现在,当我生成网址时,我会像我想要的那样附加.csv
。
customers_with_favorite_color_url(color: 'blue')
# => `http://localhost:3000/customers/with_favorite_color/blue.csv
<强>更新强>
要将此应用于多个路线,您可以遵循How to set default format for routing in Rails?的建议并使用具有这些默认值的范围。
scope format: true, defaults: { format: 'html' } do
# Define your resources here like normal
end