2016-03-25 3 views
0

Я нахожусь в логической «вилке» на дороге, где пользователь может выбрать план оплаты моего сервиса или использовать «код купона», который они предварительно приобрели. У меня есть функциональность для выбора «плана платежей», и теперь я работаю над другой вилкой на дороге, но чувствую, что все происходит неправильно. Я закончил копирование и адаптацию функциональности «плана платежей» с включением coupon_code ... поэтому у меня есть отдельный маршрут, если они предпочитают использовать купон, а также отдельные виды и методы контроллера.Rails redirect_to not rendering

В конце концов, мне нужно будет создать «клиент» для будущей оплаты, вместо того, что у меня есть, что создает «клиент» и сразу же заряжает их, следовательно, потребность в вилке в дорога (я думаю).

Конечно, я мог бы обойти это все неправильно, поэтому, пожалуйста, дайте мне знать, если есть лучший способ.

Вот что у меня есть, пытаясь заставить работать код купона, однако он не перенаправляется на новый вид, хотя журналы говорят, что «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)

просмотров/пакеты/индекс .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] 
+0

Могу ли я увидеть ваш 'package_controller'? Вы называете 'JS'. Его 'JavaScript', посмотрите на консоль' Processing by PackagesController # coupon as JS'. JS не будет перенаправлять, тогда вам придется сделать это ajaxing catch. или вызывается как HTML для его переадресации. – 7urkm3n

+1

или просто удалить '<% = form_tag ('/ packages/coupon', id: 'coupon_form', remote: true) сделать%>' 'remote: true' часть для вызова в качестве HTML, то он перенаправит !!! – 7urkm3n

+0

@ 7urkm3n какую часть вы ищете? Нет ссылки на рендеринг как json в любом месте ... вот что меня смущает. – Godzilla74

ответ

0

Если вы хотите вызвать асинхронно, вы можете использовать remote: true

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

Чтобы извлечь его, создать файл в /пакетов/create.js.erb файл.

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

проверка консоли браузера, чтобы увидеть неправдоподобные данные.

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