Rails: respond_with 自定义对象
Rails: respond_with custom object
respond_with 实际上是为了与 ActiveModel
的实例一起使用。我试图将它与 OpenStruct
的实例一起使用,但它引发了错误。
是否可以将 respond_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 响应,在上述情况下。
您正在传递一个结构,它与您的模型实例不对应。在这种情况下,respond_with
不知道在您的视图中重定向到哪里,也没有从中呈现 MIME 响应的实例。
请参阅 José Valim 的 RailsCast and this blogpost。
注意:错误 undefined method persisted?
是由 Devise 生成的,可能是因为它找不到路由。
respond_with 实际上是为了与 ActiveModel
的实例一起使用。我试图将它与 OpenStruct
的实例一起使用,但它引发了错误。
是否可以将 respond_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 响应,在上述情况下。
您正在传递一个结构,它与您的模型实例不对应。在这种情况下,respond_with
不知道在您的视图中重定向到哪里,也没有从中呈现 MIME 响应的实例。
请参阅 José Valim 的 RailsCast and this blogpost。
注意:错误 undefined method persisted?
是由 Devise 生成的,可能是因为它找不到路由。