标签: respond-to

给定一个类,看看实例是否有方法(Ruby)

我在Ruby中知道我可以respond_to?用来检查对象是否有某种方法.

但是,鉴于课程,我如何检查实例是否有某种方法?

即,像

Foo.new.respond_to?(:bar)
Run Code Online (Sandbox Code Playgroud)

但我觉得有必要比实例化一个新实例更好的方法.

ruby respond-to

219
推荐指数
5
解决办法
10万
查看次数

如何判断控制器已解析为呈现的格式

在使用以下代码的rails控制器操作中:

respond_to do |format|
  format.json{ render :json=>  {:status => 200, :response=>@some_resource} }
  format.html { redirect_to(some_resource_path)}
end
Run Code Online (Sandbox Code Playgroud)

如何记录控制器将解析的格式,即"HTML"或"json"?formatCollector类型.有没有办法获得表示格式的字符串?

controller ruby-on-rails respond-to ruby-on-rails-3

49
推荐指数
2
解决办法
2万
查看次数

ActionController的:: UnknownFormat

在我的rails应用程序中,我有一个ajax请求到服务器,以存储一些数据.这曾经没有任何问题,但现在我收到一个错误:

ActionController::UnknownFormat (ActionController::UnknownFormat):
  app/controllers/reservations_controller.rb:45:in `create'
Run Code Online (Sandbox Code Playgroud)

以下是控制器和我的javascript文件,其中我声明数据类型是JSON

class ReservationController < ApplicationController

  respond_to :html, :json

  def create
    ...
    respond_to do |format|
      if @reservation.save
        format.html do
          redirect_to '/'
        end
        format.json { render json: @reservation.to_json }
      else
        render 'new'
      end
    end # respond_to
  end # create 
end # ReservationController
Run Code Online (Sandbox Code Playgroud)

function.js

$.ajax({
        url: url_link,
        dataType: 'json',
        type: 'POST',
        data: dataToSend
      })
Run Code Online (Sandbox Code Playgroud)

完整的错误日志是:

Completed 406 Not Acceptable in 45ms

ActionController::UnknownFormat (ActionController::UnknownFormat):
app/controllers/bookings_controller.rb:45:in `create'

Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.5ms)
Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.8ms)
Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.8ms)
Rendered /Users/tiagovieira/.rvm/gems/ruby-2.0.0-p451/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout …
Run Code Online (Sandbox Code Playgroud)

ruby ajax respond-to ruby-on-rails-4

43
推荐指数
3
解决办法
12万
查看次数

Rails:respond_to JSON和HTML

我有一个控制器"UserController",应该响应正常和ajax请求http://localhost:3000/user/3.

当它是正常请求时,我想渲染我的视图.当它是一个AJAX请求时,我想返回JSON.

正确的方法似乎是一个respond_to do |format|障碍.编写JSON很简单,但是如何让它响应HTML并像往常一样呈现视图?

  def show
    @user = User.find(params[:id])
    respond_to do |format|
      format.html {
        render :show ????this seems unnecessary. Can it be eliminated??? 
      }
      format.json { 
        render json: @user
      }
    end
  end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails respond-to ruby-on-rails-4

41
推荐指数
2
解决办法
7万
查看次数

在`respond_to'格式语句中,`:location => ...`和`head:ok`是什么意思?

我正在使用Ruby on Rails 3,我想知道以下代码中的:location => ...head :ok语句含义,它们如何工作以及如何使用它们.

respond_to do |format|
    format.xml  { render :xml => @user, :status => :created, :location => @user }
end

respond_to do |format|
    format.xml  { head :ok }
end
Run Code Online (Sandbox Code Playgroud)

ruby format ruby-on-rails respond-to ruby-on-rails-3

40
推荐指数
1
解决办法
2万
查看次数

如何从rails中的respond_to方法生成json?

如果我有这样的代码块:

def show
  @post = Post.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @post }
    end
  end
Run Code Online (Sandbox Code Playgroud)

我该如何添加类似的内容

format.json
Run Code Online (Sandbox Code Playgroud)

任何提示,指示,想法都欢迎...

json ruby-on-rails respond-to

30
推荐指数
2
解决办法
5万
查看次数

Rails respond_with - 为什么POST返回URL而不是数据?

这是一个问题"为什么这样做",而不是"我如何使这项工作".

我的应用程序正在调用返回JSON的第三方REST API,并将结果作为我自己的 JSON API的一部分返回.

我使用的是Rails 3 respond_torespond_with方法; 在GET请求的情况下,这正如我所期望的那样工作,只是通过JSON.

在这种情况下POST,它会做更多,包括从返回的对象中生成一个URL来传递一个:location选项.但由于我的对象只是JSON(不是ActiveRecord),我收到错误.

例如...

# POST /api/products.json with params id=:id
def create
  query_string = "#{user_id}&id=#{params[:id]}"
  @products = third_party_api_wrapper.products(query_string, 'POST')
  respond_with @products
end 
Run Code Online (Sandbox Code Playgroud)

我的第三方API的包装器发出一个POST请求,返回正常,然后Rails返回500错误,记录如下:

NoMethodError (undefined method `{"response":{"message":"product 4e1712d9ec0f257c510013f8 selected"}}_url' for #<MyController> 
Run Code Online (Sandbox Code Playgroud)

Rails希望我的@products对象知道如何创建位置URL.

澄清:@products第三方API返回的对象是纯JSON - 一个字符串,您可以在上面的错误日志消息中看到它.发生此错误是因为Rails似乎希望对象更多 - 在Rails内部API支持中,它是一个ActiveRecord对象.

如果我respond_with用旧式替换新的sytax

respond_to do |format|
  format.json { render :json => @products }  # note, no :location or :status options
end
Run Code Online (Sandbox Code Playgroud)

一切正常.这就是我所做的,所以我没有"如何"的问题,而是有一个"为什么"的问题.

Ryan Daigle …

rest json respond-to ruby-on-rails-3

17
推荐指数
1
解决办法
7897
查看次数

respond_to和respond_with如何在rails中工作?

什么时候有

def some_action
  respond_to do |format|
    format.html {}
    format.js {}
    format.json { respond_with @objects}
  end
end
Run Code Online (Sandbox Code Playgroud)

看起来像html行和js行自动提供/调用匹配动作名称的文件.并且html和js提供一个或另一个,而不是两者.它是否正确?

如果你的js中有一个被调用的ajax调用,它会调用json,它会请求数据,这些需要数据来响应,对吗?我是否需要它来响应json和js,或只是一个?

如果你不回复,并省略所有类型,它默认是否响应html和js?

当我在控制器中执行respond_to而不是每个动作中的respond_to块时,是否使用respond_with @objectsapply to any argument(:thml,:js,:xml,:json等)?

替代语法:

class TheController < ApplicationController

  respond_to :html, :js, :json, only: [:some_action, :other_action]

  def some_action
    respond_with @objects
  end
end
Run Code Online (Sandbox Code Playgroud)

备用语法如何工作?

如果您使用备用语法,您是否可以对不同类型的请求做出不同的响应?如果要以不同的方式响应,是否必须执行respond_to阻止而不是替代语法?这些案例中的每一个如何解决html的优雅降级问题?

ajax ruby-on-rails respond-to

9
推荐指数
2
解决办法
1万
查看次数

Rails:如何在控制器中呈现其他动作,在js中不在html中?

我的控制器中有两个动作:

def find
  @item = Item.find(params[:id])
  render 'result', :id => @item.id
end

def result
  @item = Item.find(params[:id])
  respond_to do |format|
    format.js
  end
end
Run Code Online (Sandbox Code Playgroud)

问题在于我先调用find动作,然后调用result动作但是采用html格式.所以'format.js`永远不会被触发.

如何在find动作结束时呈现resultjs格式的动作?

非常感谢 !

json ruby-on-rails render respond-to

5
推荐指数
1
解决办法
3697
查看次数

如何在Rails中使用respond_to设置自定义flash

respond_to你可以设置flash[:notice]这样的

respond_to do |format|
  format.html { redirect_to photo_path(photo), :notice => 'The photos was saved') }
  format.xml  { render :xml => photo, :status => :created}
end
Run Code Online (Sandbox Code Playgroud)

我试图设置flash [:success] :success => "yay"但它不起作用.

难道我做错了什么?

respond-to ruby-on-rails-3

5
推荐指数
2
解决办法
2781
查看次数