从根本上来说,response_with旨在与ActiveModel
的实例一起使用。我尝试将其与OpenStruct
的实例一起使用,但会引发错误。是否可以对自定义对象使用response_with?
class CryptController < ApplicationController
respond_to :json
def my_action
respond_with OpenStruct.new(foo: 'foo', bar: 'bar')
end
# ...
end
引发:**未定义的方法persisted?' for nil:NilClass** ruby-2.1.4@rails4/gems/actionpack-4.2.5.1/lib/action_dispatch/routing/polymorphic_routes.rb:298:in
handle_list'/home/workstat/.rvm/gems/ruby-2.1.4@rails4/gems/actionpack-4.2.5.1/lib/action_dispatch/routing/polymorphic_routes.rb : 206:in polymorphic_method' /home/workstat/.rvm/gems/ruby-2.1.4@rails4/gems/actionpack-4.2.5.1/lib/action_dispatch/routing/polymorphic_routes.rb:114:in
polymorphic_url'
respond_with
是将资源公开给mime请求的帮助程序方法。
从文档中
respond_with(@user)
对于该create
操作,等效于(假设respond_to :xml
在示例中):
respond_to do |format|
if @user.save
format.html { redirect_to(@user) }
format.xml { render xml: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.xml { render xml: @user.errors, status: :unprocessable_entity }
end
end
end
精确的等效值取决于控制器的动作。
关键要点是,respond_with
将@instance变量作为参数,并首先尝试重定向到相应的html视图。如果失败,在上述情况下,它将呈现xml响应。
您传入的是与模型实例不对应的ostruct。在这种情况下,您respond_with
不知道在视图中重定向到的位置,也没有实例来呈现mime响应。
注意:该错误undefined method persisted?
是由Devise产生的,可能是因为找不到路线。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句