在Rails中,POST,渲染另一个动作在同一个动作中转换为GET,为什么?

时间:2015-04-19 13:32:27

标签: ruby-on-rails redirect action render

我在一个安静的控制器中有一些额外的,非Restful的动作。一个动作响应GET,一个表单,表单执行POST / PATCH(我已尝试过两个),另一个动作。如果不满足要求,则响应POST的方法会向模型添加错误消息,并呈现第一个操作,完全类似于编辑和更新,或者新建和创建。但...

如果第二个动作必须回溯到我在日志中看到的第一个动作它是正确的,但之后立即发出请求以获取第二个动作,这显然是因为那里&#39 ; s没有第二个动作的GET路径。最终结果是我没有将错误传递给表单。为什么是这样?可能是什么原因造成的?这让我疯了。

这是代码



def finish_subscription
    unless user_signed_in?
      store_location_for :user,request.path
      redirect_to new_user_session_path
    else
      @user ||=User.find_by(subscribe_token: params[:token])
      authorize! :finish_subscription,@user
      @user.accepted_t_and_c = false
    end
  end

  def confirm_subscription
    @user=User.find_by(subscribe_token: params[:token])
    authorize! :confirm_subscription,@user
    if @user.update_attributes(user_params)
      o = @user.orders.create
      o.build_a_default_subscription
      o.save
      session[:active_order_id] = o.id
      @user.subscribe_token = nil
      @user.save
      redirect_to pay_via_braintree_path    
    else
       # I've tried all combinations of render action: 'finish_subscription', render :finish_subscription & etc
      render 'finish_subscription'
    end
  end




这是我在日志中看到的内容; -

Started POST "/users/confirm_subscription/d6bb1ffbe56207b6c6864e739e9a455b"

当验证错误失败时,它会到达

render 'finish_subscription' 

响应; -

Rendered users/finish_subscription.html.haml within layouts/application (2.4ms)

这是我的期望。但随后,紧接着......

Started GET "/users/confirm_subscription/d6bb1ffbe56207b6c6864e739e9a455b" 

WTF !!!当然,这会失败,因为该行动没有GET路线。

为什么会出现这种情况的原因?为什么它会在一个阳光明媚的周日下午发生,当时我有更好的事情要做?

0 个答案:

没有答案