0

私は、DataTablesの使用方法をデモするRailscast 340を実装しようとしています。これは、私のプロジェクトにとって素晴らしい宝石のように見えます。

もちろん、私のモデルは異なります。しかし、サーバー側の処理を行うためにベイツ氏が(非常に迅速に)構築するデータテーブルクラスは、従うのがかなり複雑です。私はソースコードを入手し、基本的にそれを実行しようとしました。私の見解では、レコードはゼロですが(ただし、10,000を超えるレコードがあります)、壊れることはありません。

ただし、レールサーバーから出力されるエラーメッセージは、停止する直前に次のように表示されます。

NameError (undefined local variable or method `genotypes' for #<GenotypesDatatable:0xa9e852c>):
  app/datatables/genotypes_datatable.rb:12:in `as_json'
  app/controllers/genotypes_controller.rb:8:in `block (2 levels) in index'
  app/controllers/genotypes_controller.rb:6:in `index'

この直前に、次のJSONエラーが発生しているようです。

Started GET "/genotypes.json?sEcho=1&iColumns=8&sColumns=&iDisplayStart=0&iDisplayLength=10&mDataProp_0=...

遺伝子型コントローラーの関連部分は次のようになります。

  def index
     respond_to do |format|
      format.html
      format.json { render json: GenotypesDatatable.new(view_context) }
    end
  end

そして、私の遺伝子型モデルは次のようになります。

class Genotype < ActiveRecord::Base
  attr_accessible :allele1, :allele2, :run_date
  belongs_to :gmarkers
  belongs_to :gsamples

end

私のdatatablesクラスを以下に示します。これはベイツ氏のコードからのものであり、彼の製品モデルを私の遺伝子型モデルに置き換えるために(おそらく間違って)変更されています。

class GenotypesDatatable
  delegate :params, :h, :link_to, to: :@view

  def initialize(view)
    @view = view
  end

  def as_json(options = {})
    {
      sEcho: params[:sEcho].to_i,
      iTotalRecords: Genotype.count,
      iTotalDisplayRecords: genotypes.total_entries,
      aaData: data
    }
  end

private

  def data
    genotypes.map do |genotype|
      [
        link_to(genotype.name, genotype),
        h(genotype.category),
        h(genotype.released_on.strftime("%B %e, %Y")),
        genotype.run_date
      ]
    end
  end

  def Genotypes
    @Genotypes ||= fetch_Genotypes
  end

  def fetch_genotypes
    genotypes = Genotype.order("#{sort_column} #{sort_direction}")
    genotypes = genotypes.page(page).per_page(per_page)
    if params[:sSearch].present?
      genotypes = genotypes.where("name like :search or category like :search", search: "%#{params[:sSearch]}%")
    end
    genotypes
  end

  def page
    params[:iDisplayStart].to_i/per_page + 1
  end

  def per_page
    params[:iDisplayLength].to_i > 0 ? params[:iDisplayLength].to_i : 10
  end

  def sort_column
    columns = %w[gmarker gsample allele1 allele2 run_date]
    columns[params[:iSortCol_0].to_i]
  end

  def sort_direction
    params[:sSortDir_0] == "desc" ? "desc" : "asc"
  end
end

このエラーのトラブルシューティング(または修正)方法に関するヒントは大歓迎です!(これを私のプロジェクトで機能させるのは素晴らしいことです!)

TIA、リクスター

4

1 に答える 1

1

これが正しいかどうかはわかりませんが、あなたのクラスには大文字の G を持つ Genotype メソッドがあり、すべて小文字にする必要があります。

于 2012-07-25T21:56:59.257 に答える