私のモデルの1つに関連するエラーが発生しました。それをUnit
としましょう。次のコードでは、エラーが発生します。as_json [`timeout`メソッドの引数が間違っています!]
format.json { render :json => @units.as_json }
エラーは約誤ったパラメータ数(0の1)です。
私のモデルの1つに関連するエラーが発生しました。それをUnit
としましょう。次のコードでは、エラーが発生します。as_json [`timeout`メソッドの引数が間違っています!]
format.json { render :json => @units.as_json }
エラーは約誤ったパラメータ数(0の1)です。
私はこの問題を解決しました。 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
したがって、実際のエラーは、たとえば次のような呼び出しによって返されたメソッドの1つです。 Unit.first.attributes.keys.sort
(["dev_id", "flags", "id", "inote", "ip", "location_id", "model_id", "name", "period", "phone", "port", "snote", "timeout"]
)は私にそれに引数を渡すことを期待しています。このメソッドはtimeout
ですが、それはいくつかのプライベートメソッドです。したがって、問題の正しい解決方法は、この属性の名前を別のものに変更することです。
私はあなたが望むものを信じています。あなたはあなたの関係が正しくMonitoringObject
とUnit
モデルの間で設定している場合
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
または、
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
パラメータでそれを供給しています。
JSON応答に含めたくない属性がある場合は、:except
という条件を使用します。
rails guide on views and renderingによれば、.to_json
を指定する必要はありません。自動的に呼び出されます。
問題はどこかの.restricted_find
メソッドにある可能性があります。あなたはスタックトレース全体を投稿することができますか?それを含むgithub要点にリンクすることはできますか?
同じことをやってみました。 –
更新されたanswer plsを確認してください。 –
更新された質問に全体のアクションメソッドを入れました。 .as_jsonを削除しても、まだ動作しません。 –
エラーのバックトレースは何ですか? –
まず、モデルで定義した 'as_json'を完全にコメントアウトしてみてください。 Railsはデフォルトで作成しますので、実際には必要ありません。生成されたデフォルトのjsonがあなたのニーズを満たしていない場合は、それをカスタマイズしてカスタマイズすることができます。 –
@KevinBedellコメントアウトしても、それと同じエラーです。 –