モデルの 1 つに関連する Rails でエラーが発生しました。これを と呼びましょうUnit
。次のコードではエラーが発生します。
format.json { render :json => @units.as_json }
エラーは、パラメーターの数が間違っている (0 の 1) に関するものです。
モデルの 1 つに関連する Rails でエラーが発生しました。これを と呼びましょうUnit
。次のコードではエラーが発生します。
format.json { render :json => @units.as_json }
エラーは、パラメーターの数が間違っている (0 の 1) に関するものです。
私はあなたが望むものは次のとおりだと信じています。
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
空のパラメーターを指定しています。
:except
JSON応答に含めたくない属性がある場合は、条件を使用します。
ビューとレンダリングに関するレールガイドによると、指定する必要はありません.to_json
。自動的に呼び出されます。
問題はあなたの.restricted_find
方法のどこかにあるように私には思えます。スタックトレース全体を投稿できますか)、またはそれを含むgithubの要点にリンクできますか?
問題を解決しました。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 のモンキー パッチ オブジェクトのプライベート メソッドです。したがって、この問題の正しい解決策は、この属性の名前を別のものに変更することです。