Rails redirect_to不呈现

时间:2016-03-25 16:10:59

标签: javascript ruby-on-rails ruby

我正处于一个合乎逻辑的“岔路口”,用户可以选择我的服务付款计划或使用他们预先购买的“优惠券代码”。我有选择“付款计划”工作的功能,现在我正在研究另一个叉子,但我觉得我错了。我最终复制并调整了“付款计划”功能,并包含coupon_code ...所以,如果他们选择使用优惠券以及单独的视图和控制器方法,我会有一条单独的路线。

最后,我需要为将来的付款创建一个“客户”,而不是我创建“客户”并立即收取费用的功能,因此需要在路上使用叉子(我想)。

当然,我可以解决这个问题,所以如果有更好的方法,请告诉我。

这是我试图获得优惠券代码的工作,但是,它不会重定向到新视图,即使日志说它是,“POST”似乎工作正常。我不确定为什么日志显示它正在尝试渲染packages/show.json.jbuilder,我认为这是问题所在:

控制台日志

Started POST "/packages/coupon" for 127.0.0.1 at 2016-03-25 10:52:17 -0500
Processing by PackagesController#coupon as JS
  Parameters: {"utf8"=>"✓", "coupon_code"=>"59ee713a79b44af780c7b7c54f046570"}
  User Load (0.9ms)  SELECT  "users".* FROM "users"  WHERE "users"."deleted_at" IS NULL AND "users"."id" = 16  ORDER BY "users"."id" ASC LIMIT 1
  Role Load (0.6ms)  SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles"."id" = "roles_users"."role_id" WHERE "roles"."deleted_at" IS NULL AND "roles_users"."user_id" = $1  [["user_id", 16]]
  Device Load (34.9ms)  SELECT  "devices".* FROM "devices"  WHERE "devices"."identifier" = '59ee713a79b44af780c7b7c54f046570'  ORDER BY "devices"."id" ASC LIMIT 1
Redirected to http://localhost:3000/packages/coupon
Completed 302 Found in 59ms (ActiveRecord: 36.4ms)


Started GET "/packages/coupon" for 127.0.0.1 at 2016-03-25 10:52:17 -0500
Processing by PackagesController#show as JS
  Parameters: {"id"=>"coupon"}
  User Load (0.9ms)  SELECT  "users".* FROM "users"  WHERE "users"."deleted_at" IS NULL AND "users"."id" = 16  ORDER BY "users"."id" ASC LIMIT 1
  Role Load (0.6ms)  SELECT "roles".* FROM "roles" INNER JOIN "roles_users" ON "roles"."id" = "roles_users"."role_id" WHERE "roles"."deleted_at" IS NULL AND "roles_users"."user_id" = $1  [["user_id", 16]]
  Rendered packages/show.json.jbuilder (8.5ms)
Completed 200 OK in 51ms (Views: 44.8ms | ActiveRecord: 1.4ms | Solr: 0.0ms)

视图/包/ index.html.erb

<!-- Modal -->
<div class="modal fade" id="couponModal" tabindex="-1" role="dialog" aria-labelledby="couponModalLabel">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title" id="couponModalLabel">Enter Coupon Code</h4>
      </div>
      <div class="modal-body">
        <p>Enter your pre-purchased coupon code in the area below.</p>
        <%= form_tag('/packages/coupon', id: 'coupon_form', remote: true) do %>
          <%= text_field_tag 'coupon_code', nil, placeholder: 'Coupon Code' %>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <%= submit_tag "Submit Code", class: "btn btn-success" %>
      </div>

        <% end %>

    </div>
  </div>
</div>

控制器/ packages_controller.rb

  # Route for using a coupon code
  def coupon
    device = Device.where(identifier: params[:coupon_code]).first
    if !device.nil? && device.is_provisioned
      # TODO: Route to new route that just adds customer to stripe
      redirect_to controller: 'packages', action: 'coupon'
    else
      # TODO: Back to pacakge page letting them know the coupon is invalid.
      puts false
    end
  end

视图/包/ coupon.html.erb

<div class="row login-container column-seperation">
    <div class="col-md-6 col-md-offset-3">
      <h2 class="text-center">You're almost done!  You've already paid for the service, so we just need to collect your payment information for future purchases.</h2>
      <br/>
        <div class="row">
          <div align="center" class="col-md-12">
            <%= render 'coupon_form' %>
          </div>
        </div>
    </div>
  </div>

配置/ routes.rb中

 match '/packages/coupon', to: 'packages#coupon', via: [:post, :get]

1 个答案:

答案 0 :(得分:0)

如果要异步调用,可以使用 remote: true

<%= form_tag('/packages/coupon', id: 'coupon_form', remote: true) do %>

要获取它,请在 / packages 文件夹 /create.js.erb 文件中创建文件。

console.log("<%= j render @package %>");

检查浏览器控制台以查看提取的数据。

$('nav').after("<div class='alert alert-success'> Package Successfully Added </div>");
$('#packages').append("<%= j render @package %>");