我在 Rails 中遇到与我的一个模型相关的错误,我们称之为Unit
. 以下代码会产生错误:
format.json { render :json => @units.as_json }
错误是关于错误数量的参数(0 of 1)。
我在 Rails 中遇到与我的一个模型相关的错误,我们称之为Unit
. 以下代码会产生错误:
format.json { render :json => @units.as_json }
错误是关于错误数量的参数(0 of 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 响应中包含某些属性,您将使用条件。
根据有关视图和渲染的 rails 指南,您无需指定.to_json
- 它会自动为您调用。
在我看来,问题可能出在你的.restricted_find
方法上。您可以发布整个堆栈跟踪)或链接到包含它的 github gist 吗?
我解决了这个问题。来自 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"]
) 返回的方法之一希望我将参数传递给它。这个方法是timeout
,它是 Rails 猴子修补 Object 的一些私有方法。所以解决这个问题的正确方法是把这个属性重命名为别的东西。