2

ファイル システムからファイルをダウンロードするためのリンクを作成しようとしています。このために、「license_helper.rb」ファイルで次のように定義します。

def license_download_link(license, link_text = nil)
    if link_text.blank?
      link_text = image_tag("download_icon.png", :border => 0, :width => 32, :height =>32,  :alt => 'Download License', :title => 'Download License')
    end

    licenseFileId = license.asset.serial_number
    send_file '#{licenseFileId}license.xml', :type => "application/xml", :filename => "#{licenseFileId}license.xml"
    #send_file ' "#{licenseFileId}license.xml" ', :disposition => 'inline'
    #send_file("#{licenseFileId}license.xml", :type => :xml)
    #link_to link_text, '#{"C:\\Entitlement\\trunk\\entitlement_site\\entitlement\\25license.xml"}'
end

私の「ビュー」は、このヘルパー クラスを呼び出すだけです。

<td><%= license_download_link(license, ' ') %></td>

ページを表示しようとすると、次のエラー メッセージが表示されます。

undefined method `send_file' for #<ActionView::Base:0x5fb3650>

ご覧のとおり、「send_file」を呼び出す方法をたくさん試しましたが、常に同じエラー メッセージが表示されます。お時間をいただきありがとうございます。よろしくお願いします。 --- AJ

4

1 に答える 1

8

send_fileビューからではなく、コントローラー アクションから呼び出す必要があります。コントローラー アクションは、ユーザーがリンクをクリックすると呼び出されます。

ビューでは、コントローラー アクションへのリンクが必要です。


詳細は正確なアプリケーションによって異なりますが、部品がどのように組み合わされるかについての大まかな概要は次のとおりです。

コントローラーを生成します。

class LicenceController < ApplicationController
  def download
    # look up the licence and then use send_file
  end
end

次に、編集config/routes.rbして、ライセンスのダウンロード用のわかりやすい URL を作成できます。

match 'licences/:id/download' => 'licence#download', :as => 'licence_download'

これは、フォームの URL がコントローラー メソッドをlicences/xyz/download呼び出し、ヘルパー メソッドが自動的に作成されることを意味します。downloadlicence_download_url

次に、あなたの見解でできること

<%= link_to 'Download your licence', licence_download_url(licence) %>

ダウンロード アイコンを含むリンクを生成するためのヘルパー メソッドを作成したい場合は、それも可能です。

あなたが Rails にまったく慣れておらず、アプリケーションの各部分をどのように組み合わせるかに苦労している場合は、Rails を使用したAgile Web Developmentを手に入れるのに適した本です。

于 2012-09-12T14:07:46.643 に答える