0

レールについて本当に基本的な質問があります-解決策をインターネットで探すのに何時間も費やしました-しかし解決策を見つけることができません。

リンクをクリックするだけでメソッドを呼び出す必要があります。

アイデアは、コントローラーのメソッドによって生成されたxmlファイルをエクスポートする必要があるということです。

firms_controller.rb(抜粋)

.....def xml
    @entries = Entry.find(:all)
    send_data @entries.to_xml,
    :type => 'text/xml; charset=UTF-8;',
    :disposition => "attachment; filename=entries.xml"
end....

会社のビューページからこのメソッドを呼び出してxmlファイルをダウンロードする必要がありますが、それを機能させることができません。XMLコードは機能します-コントローラーのindexメソッドに追加すると、問題なく機能します。

これは私がいくつかのオンライン記事を読んだ後にリンクを機能させることを試みたいくつかの方法です。

<% url = url_for({:action => "xml", :controller => 'firms'}.merge(params)) %>
<%= link_to "XML", url %>

試した最も基本的な方法

<%= link_to "XML", :action => 'xml' %>

非常に単純なはずの何かのように思えますが、それを機能させることはできません。

私が得ているエラー:

ActiveRecord::RecordNotFound in FirmsController#show

Couldn't find Firm with ID=xml

Rails.root: /home/james/rails/KPSmart
Application Trace | Framework Trace | Full Trace

app/controllers/firms_controller.rb:25:in `show'

firms_controllerのshowメソッド

  def show
  @firm = Firm.find(params[:id])
  end

ルートをいじって、無駄に動作させるようにしました。

ご協力いただきありがとうございます

4

3 に答える 3

2

これを試して

ルートでは、会社のコントローラー用に書いたリソースの上にこれを書きます

match 'firms/xml', :controller => 'firms', :action => 'xml',:as => :firms_xml

これを次の方法でリンクします

<%= link_to "XML", firms_xml_path %>
于 2012-05-22T04:50:28.807 に答える
1

これは、ルーティングの問題またはリンクの問題のようです。ID パラメーターを XML コントローラー メソッドに渡す必要がありますか? あなたのリンクの例はそれを示していません。link_to ヘルパーでパラメーターを渡す方法を調べる必要があります。

http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to

routes.rb にデフォルトのルートが設定されている場合:

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

次に、link_to は次のようになります。

link_to "XML", :controller => "会社", :action => "xml", :id => 1234

1234 は、検索しようとしている実際の ID です。

于 2012-05-22T03:29:58.327 に答える
1

リンク先のURLをチェック!

あなたが期待しているものではないと思います。を介して 2 つのハッシュをマージするhash1.merge(hash2)と、重複したキーは からのものを生成しhash2ます。そして、(私が正しく思い出せば) Railsのルーティングプロセス中にparamsハッシュ:action:controllerキーが追加されたため、現在の(表示)ページへのルートによって予想されるルートがオーバーライドされています。

を試しreverse_mergeてみると、より予測可能な結果が得られますが、Rails のパス生成ヘルパーを使用して作業をさらに簡単にすることをお勧めします。

<%= link_to "XML", firm_xml_path(@firm) %>

それが役立つことを願っています!

于 2012-05-22T03:30:19.797 に答える