0

こんにちは!

私はこの問題を抱えています:私は日付でレポートを検索しています、そしてhtmlビューではすべてが大丈夫です、しかし私がレンダリングしているときxlsビューエラーが表示されます、それはパラメータを受け取らなかったので、xlslink_toのURLでそれらを渡す必要があります発生器。

私のコントローラー:

def show
  @website = Website.find(params[:id])
  if params[:report] && params[:report][:start_date] && params[:report][:end_date]
    #search_by_created_at
    @performance_reports = @website.performance_reports.where("created_at between ? and ?", params[:report][:start_date].to_date, params[:report][:end_date].to_date)
  else
    @performance_reports = @website.performance_reports
  end
  respond_to do |format|
    format.html # index.html.erb
    format.xls
    format.xml  { render :xml => @performance_reports }
  end
end

生成されたURLは次のようになります。

 http://127.0.0.1:3000/websites/25/performance_reports/show?utf8=%E2%9C%93&report[end_date]=07%2F09%2F2012&report[start_date]=04%2F09%2F2012&commit=Run+Report

minexlsurlは次のように生成されます。

 <%= link_to url_for(:format => 'xls')  do%>
   <%= image_tag("excel.png", :id => "analytics",:size => '21x23')%> <b>Export</b>
 <% end %>

結果:

http://127.0.0.1:3000/websites/25/performance_reports/show

どんな助けでもありがたいです。

4

1 に答える 1

1

xlsはデフォルトでは使用できません。

これを追加:

gem "spreadsheet"
gem "to_xls", :git => "https://github.com/dblock/to_xls.git", :branch => "to-xls-on-models"

config/initializers/mime_types.rbこれを追加して、ExcelMIMEタイプを登録します。

Mime::Type.register "application/vnd.ms-excel", :xls

必要なフィールドにエクスポートするモデルにas_xlsメソッドを追加します。たとえば、次のようなUserモデルの場合:

def as_xls(options = {})
  {
      "Id" => id.to_s,
      "Name" => name,
      "E-Mail" => email,
      "Joined" => created_at,
      "Last Signed In" => last_sign_in_at,
      "Sign In Count" => sign_in_count
  }
end

コントローラにコードを追加します。

def index
  @users = User.all
  respond_to do |format|
    format.html
    format.xls { send_data @users.to_xls, content_type: 'application/vnd.ms-excel', filename: 'users.xls' }
  end
end

リンクを提供します:

= link_to 'Export', users_path(request.parameters.merge({:format => :xls}))

すべてのコードにテストが必要です。あなたはこのようなことをすることができます:

describe "GET index.xls" do
  it "creates an Excel spreadsheet with all users" do      
    user = Fabricate :user
    get :index, :format => :xls
    response.headers['Content-Type'].should == "application/vnd.ms-excel"
    s = Spreadsheet.open(StringIO.new(response.body))
    s.worksheets.count.should == 1
    w = s.worksheet(0)
    w.should_not be_nil
    w.row(0)[0].should == "Id"
    w.row(1)[0].should == user.id.to_s
    w.row(0)[1].should == "Name"
    w.row(1)[1].should == user.name
  end
end
于 2012-09-08T14:16:14.013 に答える