2015-04-13 4 views
0

Я использую rails4.2.0 на моем сайте электронной коммерции, когда пользователь отправляет свой тип оплаты, я хочу перенаправить внешний сайт. Поток ниже.ajax auto form submit with rails4

  1. пользователя выбрать тип оплаты
  2. использования нажмите кнопку представить - Аякс (формат JS) -
  3. перенаправления вне сайта с помощью POST METHOD

источника 2 и 3 являются как,

create.html.erb

<%= form_for(:user,:url => { controller: "settlements", action: "settlement"}, remote: true, html: {class: :settlement_form}) do |f| %> 
<%= f.radio_button :settlement_type, 0 %>paypal 
<%= f.radio_button :settlement_type, 1 %>credit card 
<%= f.hidden_field :email, :value => @user.email %> 
<%= f.hidden_field :fee_type, :value => @user.fee_type %> 
<%= f.submit "Submit", data: { disable_with: "Please wait..." }, class: "btn btn-warning" %> 

settlement_controller

def settlement 
    user = User.new(user_params) 
    if user.save 
    # parameters for outside website 
    @payment_params 
    else 
    render "new" 
    end 
end 

settlement.js.erb

var form = $('<form></form>',{id:"pay",action:'http://outside_ec_site_url/hoge',method:'POST'}).hide(); 
var body = $('redirect'); 
body.append(form); 
form.append($('<input/>', {type: 'hidden', name: 'something', value: <%=  @payment_params[:something] %>})); 
form.append($('<input/>', {type: 'hidden', name: 'something', value: <%= @payment_params[:something] %>})) 
form.submit(); 

ответ

0

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

измененная settlement.js.erb как,

$("#redirect").html("<%= escape_javascript(render :partial => 'pay') %>");

и создал новый файл _pay.html.erb

<script> 
$('<form/>', {id: 'paygent',action: "outside_website_url", method: "POST"}) 
    .append($('<input/>', {type: 'hidden', name: 'something1', value: "<%= @payment_params[:somthing1] %>"})) 
    .append($('<input/>', {type: 'hidden', name: 'something2', value: "<%= @paygent_params[:something2] %>"})) 
    .appendTo(document.body) 
    .submit(); 
</script> 

затем, это работает. Знаете ли вы какой-либо другой метод? Любая идея оценивается.