【问题标题】:Template is missing --> For PUT Request模板缺失 --> 用于 PUT 请求
【发布时间】:2012-10-07 00:06:16
【问题描述】:

我能够使用 Ryan Bates 的教程集成条带。现在,我希望能够允许用户更新他们的信用卡信息。我在 change_plan_path 处设置了一个表单,它向 users/update_card 发送 PUT 请求。但是,当我单击更新信用卡按钮时,我收到错误消息:

Template is missing

Missing template users/update_card, application/update_card with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "C:/Sites/dentist/app/views"

这是我用来发送 PUT 请求的表单:

    <%= form_tag("/users/update_card", :method => "put", :class => "edit_user", :id => "change_card" ) do %>
  <%= hidden_field_tag :stripe_card_token %>

  <div id="stripe_error" class="alert">   
      <noscript>JavaScript is not enabled and is required for this form. First enable it in your web browser settings.</noscript>
  </div>

    <div class="field">
      <%= label_tag :card_number, "Credit Card Number" %>
      <%= text_field_tag :card_number, nil, name: nil %>
    </div>
    <div class="field">
      <%= label_tag :card_code, "Security Code on Card (CVV)" %>
      <%= text_field_tag :card_code, nil, name: nil %>
    </div>
    <div class="field">
      <%= label_tag :card_month, "Card Expiration" %>
      <%= select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month"} %>
      <%= select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year"} %>
    </div>


  <%= submit_tag("Update My Credit Card", :class => "button") %>

这是我的 routes.rb 文件:

  put '/users/update_plan',  to: 'users#update_plan'
  put '/users/update_card',  to: 'users#update_card'
  resources :users
  resources :sessions, only: [:new, :create, :destroy]
  resources :phones, only: [:new, :create, :destroy]
  resources :find_numbers, only: [:new, :create]  

  match '/signup',  to: 'users#new'
  match '/login',  to: 'sessions#new'
  match '/signout', to: 'sessions#destroy', via: :delete
  match '/change_plan',  to: 'users#change_plan'
  match '/change_card',  to: 'users#change_card'

  root  to: 'static_pages#home'

  match '/product_demo', to: 'static_pages#product_demo'

  match '/pricing', to: 'plans#index'

  match '/contact', to: 'static_pages#contact'

这是我正在使用的 Stripe Coffescript。它似乎还没有工作,但也许它与它有关。 (从 changecard.setupForm() 开始)

jQuery ->
  Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content'))
  subscription.setupForm()

subscription =
  setupForm: ->
    $('#new_user').submit ->
      $('input[type=submit]').attr('disabled', true)
      if $('#card_number').length
        subscription.processCard()
        false
      else
        true

  processCard: ->
    card =
      number: $('#card_number').val()
      cvc: $('#card_code').val()
      expMonth: $('#card_month').val()
      expYear: $('#card_year').val()
    Stripe.createToken(card, subscription.handleStripeResponse)

  handleStripeResponse: (status, response) ->
    if status == 200
      $('#user_stripe_card_token').val(response.id)
      $('#new_user')[0].submit()
    else
      $('#stripe_error').text(response.error.message)
      $('input[type=submit]').attr('disabled', false)

 changecard.setupForm()

changecard =
  setupForm: ->
    $('#change_card').submit ->
      $('input[type=submit]').attr('disabled', true)
      if $('#card_number').length
        subscription.processCard()
        false
      else
        true

  processCard: ->
    card =
      number: $('#card_number').val()
      cvc: $('#card_code').val()
      expMonth: $('#card_month').val()
      expYear: $('#card_year').val()
    Stripe.createToken(card, subscription.handleStripeResponse)

  handleStripeResponse: (status, response) ->
    if status == 200
      $('#user_stripe_card_token').val(response.id)
      $('#change_card')[0].submit()
    else
      $('#stripe_error').text(response.error.message)
      $('input[type=submit]').attr('disabled', false) 

【问题讨论】:

    标签: ruby-on-rails ruby coffeescript


    【解决方案1】:

    通常,当您收到此错误时,它是在控制器操作执行之后并且它正在尝试将某些内容呈现回浏览器。除非您明确告诉它要渲染什么,否则它将尝试根据控制器/动作提供视图。在不知道您的控制器是什么样子的情况下,很难准确地说出您在信息更新后会发生什么。我希望你要么想要重定向到一个新页面,要么呈现一个页面。

    如果要重定向,可以使用redirect_to 并指定路径。在以下示例中,我假设您要重定向到用户显示操作:

    redirect_to user_url(current_user)
    

    如果你想渲染一些内容,你需要为 update_card.html.erb 创建一个 html 模板或者渲染一些任意的内容,比如:

    render :text => "yay"
    

    【讨论】:

    • 不错!感谢 Beerlington 的帮助——我在另一个动作中编写了动作代码……我太天真了。
    猜你喜欢
    • 2017-12-05
    • 2019-09-23
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 2017-06-16
    • 2015-04-10
    • 1970-01-01
    • 2022-11-28
    相关资源
    最近更新 更多