新手问题 ruby-china 代码 controller 里面 action 为什么都没有 respond_to

rdongxie · 2014年10月30日 · 最后由 rdongxie 回复于 2014年10月30日 · 2289 次阅读

ruby-china 代码 controller 里面 action 为什么都没有 respond_to,而我用 scaffold 生成里面有。ruby-china 做了特殊处理?

respond_to 可以针对 :html, :json, :xml 做不同的输出

http://api.rubyonrails.org/#respond_to respond_to(*mimes, &block) 需要同时返回多种 mime_type 的时候这么做才比较好,不然就是多余的. ruby-china 论坛里面大多返回 html,所以直接render html:,api 返回 json,用render json: or render text:

#1 楼 @cisolarix 在 create 中没有写下面这段代码也是可以个根据 MIME 类型做不同的输出吧:

respond_to do |format|
      if @course.save
        format.html { redirect_to @course, notice: 'Course was successfully created.' }
        format.json { render :show, status: :created, location: @course }
      else
        format.html { render :new }
        format.json { render json: @course.errors, status: :unprocessable_entity }
      end
    end

ruby-china 的回复帖子功能里面,返回的就是 create.js.erb.而在 create 里面没有 respond_to,只有如下代码:

def create
    @reply = Reply.new(reply_params)
    @reply.topic_id = @topic.id
    @reply.user_id = current_user.id

    if @reply.save
      current_user.read_topic(@topic)
      @msg = t('topics.reply_success')
    else
      @msg = @reply.errors.full_messages.join('<br />')
    end
  end

#4 楼 @flowerwrong jquery_ujs 仅仅是 ajax 调用吧,没有涉及到 controller。jquery_ujs 发送请求 MIME_TYPE:application/javascript。

#6 楼 @flowerwrong 我测试了下,两个表单,一个使用 jquery_ujs,一个没有使用,controller 里面没有 respond_to 代码块,可以同时相应,我建立了 2 个 view create.js.erb create.html.erb。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号