0

モデルの 1 つに関連する Rails でエラーが発生しました。これを と呼びましょうUnit。次のコードではエラーが発生します。

format.json { render :json => @units.as_json }

エラーは、パラメーターの数が間違っている (0 の 1) に関するものです。

4

2 に答える 2

0

私はあなたが望むものは次のとおりだと信じています。

def scheme
  @object = MonitoringObject.restricted_find params[:id], session[:client]

  @units = Unit.where("object_id = ?", @object.id)

  respond_to do |format|
    format.html
    format.json { render :json => @units[0] }
  end
end

MonitoringObjectまたは、モデルとUnitモデルの関係が正しく設定されている場合は、

def scheme
  @object = MonitoringObject.restricted_find params[:id], session[:client]
  @units = @object.units

  respond_to do |format|
    format.html
    format.json { render :json => @units[0] }
  end
end

:except空のパラメーターを指定しています。

:exceptJSON応答に含めたくない属性がある場合は、条件を使用します。

ビューとレンダリングに関するレールガイドによると、指定する必要はありません.to_json。自動的に呼び出されます。

問題はあなたの.restricted_find方法のどこかにあるように私には思えます。スタックトレース全体を投稿できますか)、またはそれを含むgithubの要点にリンクできますか?

于 2012-05-03T14:25:55.357 に答える
0

問題を解決しました。Railsソースから:

  module Serialization
    def serializable_hash(options = nil)
      options ||= {}

      attribute_names = attributes.keys.sort
      if only = options[:only]
        attribute_names &= Array.wrap(only).map(&:to_s)
      elsif except = options[:except]
        attribute_names -= Array.wrap(except).map(&:to_s)
      end

      hash = {}
      attribute_names.each { |n| hash[n] = read_attribute_for_serialization(n) } # exception here

      # ...
    end

    alias :read_attribute_for_serialization :send

    # ...
  end

  # ...
end

したがって、真のエラーは、eg Unit.first.attributes.keys.sort( ["dev_id", "flags", "id", "inote", "ip", "location_id", "model_id", "name", "period", "phone", "port", "snote", "timeout"]) を呼び出すことによって返されるメソッドの 1 つが、引数を渡すことを期待していることです。このメソッドはtimeout、Rails のモンキー パッチ オブジェクトのプライベート メソッドです。したがって、この問題の正しい解決策は、この属性の名前を別のものに変更することです。

于 2012-05-11T15:23:47.797 に答える