11

プロジェクトを Rails 3.1 から Rails 3.2.2 に移動していますが、これがあります。

= link_to 'CSV', :action => 'list', :search => @search, :format => 'csv'

Rails 3.1 では、これは html リンク (format=csv) の形式を指定し、respond_with によってキャッチされますが、3.2.2 では形式がリンクに含まれることはありません。github のコミットのリストをスキャンしましたが、これに関連するものは見つかりません。

編集:

これは url_for の問題のようです

#rails 3.1
url_for :controller=>'posts', :action=>'index', :format=>:xml
/admin/posts/index?format=xml

#rails 3.2.2
url_for :controller=>'posts', :action=>'index', :format=>:xml
/admin/posts/index

#rails 3.2.2
url_for :controller=>'posts', :action=>'index', :format=>:xml, :id => 5
/admin/posts/index/5.xml
4

2 に答える 2

13

使ってみて:format => :csv

http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to#32-Link-to-same-URL-with-different-format

于 2012-05-02T20:19:46.657 に答える
0

Rails 3.0 から 3.2.17 にアップグレードしているときに、同じ問題に遭遇しました。

私が見たところ、問題は (他の回答が示唆するように) へのパラメーターのlink_to指定方法に関するものではなく、 のルートの定義に関係していましたroutes.rb。3.2 のように見えますが、:formatパラメーターは URL サフィックスとしてのみ渡すことができます。URL にマップされるルートがない場合:format、それは によって無視されlink_toます。このような場合、 3.0 はformatHTTP パラメータとして追加されます。3.2ではそれができなくなりました。

私の解決策は、元のデフォルトルートを

match ':controller(/:action(/:id(.:format)))'

の中へ

match ':controller(/:action(/:id)(.:format))'

元の定義は のような URL をカバーしていまし/admin/posts/index/5.xmlたが、 はカバーしていませんでし/admin/posts/index.xmlた。これは、こちらの元の質問と同じ症状のようです。

変更を適用した後、:formatが含まれていない URL にも が含まれていidました。

于 2014-05-17T13:05:08.243 に答える