2

関連するコードは次のとおりです。

def index
    @customer = Customer.new
    if(session[:admin_id])
      @allJobs = Job.where(:merchant_id => session[:admin_id].to_s).paginate(:per_page => 15, :page => params[:page])
    else
      @allJobs = Job.all(:order => :_id.desc).paginate(:per_page => 15, :page => params[:page])
    end
    respond_to do |format|      
      #@allJobs = Job.where(:merchant_id => session[:admin_id].to_s)
      format.html
      #format.csv {send_data to_csv(@all_customers)}
      format.csv { render :csv => @allJobs }

[エクスポート] をクリックすると、@allJobs の csv が表示されます。表示されている 15 項目だけです。

ご覧のとおり、フォーマット ブロックで @allJobs を Merchant_id を持つすべてのものに再定義しようとしましたが、エラーが発生しました。

No comma format for class Plucky::Query defined for style {}

var 名を別のものに変更しようとしましたが、同じエラーが発生しました。Merchant_id ステートメントに一致するすべてのジョブをエクスポートしたいだけです。

4

4 に答える 4

2

エクスポート用の CSV など、特定のリクエスト タイプに対するページネーションの制限を回避する 1 つの方法は、コントローラーを使用して、ページネーションを呼び出す前にリクエスト オブジェクトをチェックします。例えば:

def index
    @customer = Customer.new
    if(session[:admin_id])
      @allJobs = Job.where(:merchant_id => session[:admin_id].to_s)
      unless  request.format == "csv"
        @allJobs= @allJobs.paginate(:per_page => 15, :page => params[:page])
      end
    else
      if  request.format == "csv"
        @allJobs = Job.all(:order => :_id.desc)
      else
         @allJobs = Job.all(:order => :_id.desc).paginate(:per_page => 15, :page => params[:page])

      end
    end
    respond_to do |format|      
      #@allJobs = Job.where(:merchant_id => session[:admin_id].to_s)
      format.html
      #format.csv {send_data to_csv(@all_customers)}
      format.csv { render :csv => @allJobs }

:admin_id の場合、pagnation メソッドをチェーンできることに注意してください。一方、admin_id 以外の場合、.all メソッドは、paginate を呼び出すことができない配列を返します。

于 2014-02-25T19:28:22.953 に答える
2

次のようなカンマエラーをグーグルで検索した後、誰かがここにたどり着いた場合:

  • No comma format for class String defined for style {}
  • No comma format for class TrueClass defined for style {}

.to_comma次に、メソッドを悪用していないことを確認してください。Rails コントローラーでこのメソッドを呼び出す必要はありません。

不正解:

respond_to do |format|
  format.html
  format.csv { render :csv => @things.to_comma}
end

正しい:

respond_to do |format|
  format.html
  format.csv { render :csv => @things}
end
于 2013-11-02T22:30:05.653 に答える
1

これが機能する理由はわかりませんが、次のとおりです。

format.csv { render :csv => @allJobs.paginate }

オプションを呼び出さずに .paginate を追加するだけで、ページごとに表示される 15 に関係なく、すべてのジョブがエクスポートされます。

完全に更新されたコード:

def index
    @customer = Customer.new
    if(session[:admin_id])
      @allJobs = Job.where(:merchant_id => session[:admin_id]
    else
      @allJobs = Job.all(:order => :_id.desc).paginate(:per_page => 50, :page => params[:page])
    end
    respond_to do |format|      
      #@allJobs = Job.where(:merchant_id => session[:admin_id].to_s)
      format.html do
        @allJobs = @allJobs.paginate(:per_page => 15, :page => params[:page])
      end
      format.csv { render :csv => @allJobs.paginate }
于 2013-06-08T07:21:25.087 に答える