2016-12-30 3 views
0

У меня есть ссылка, которая идет к действию, так что если кто-то нажмет:как отправить сформировать внутри действия

localhost/cart/checkout?pid=123 

Он идет к кассе действия CartController, который затем отображает форму.

Но в некоторых случаях (в зависимости от того, когда я загружаю продукт с идентификатором 123), мне может не понадобиться отображать форму, я могу просто загрузить данные, а затем отправить их в действие формы.

Как я могу запрограммировать сообщение о том, где моя форма будет размещаться с данными.

class CartController < ApplicationController 
    def checkout 
    pid = params[:pid] 
    product = Product.find(pid) 
    if product.... 
     # no need to display view, just post to handleCheckout 
    end 
    end 

    # checkout form posts to this action 
    def handleCheckout 
    end 
end 
+0

Я не разработчик ruby, так что простите, если я ошибаюсь, но не можете ли вы просто отправить запрос примерно так: [Ruby: POST data to url] (http://stackoverflow.com/a/ 20769173/3504007) похоже, что он использует 'Net :: HTTP', чтобы напрямую отправлять необработанные данные в URL. Второе решение на странице, похоже, возвращает ответ как «тело» - как без вывода на страницу (только вызовы сервера на сервер) –

+0

Возможно, вы можете взглянуть на [Маршрутизация ресурсов] (http: // guide. rubyonrails.org/routing.html#resource-routing-the-rails-default). Это должно решить вашу проблему. – bananaappletw

+0

@bananaappletw, как это решить? – Blankman

ответ

0

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

Если ваше действие handleCheckout предназначено для использования в качестве запроса Get, тогда вы можете перенаправить на это действие с помощью параметров. как:

class CartController < ApplicationController 
    def checkout 
    pid = params[:pid] 
    product = Product.find(pid) 
    if product.... 
     redirect_to action: "handleCheckout", params: params 
     # Not sure whether you will get it as 'params' or params[:params] in handleCheckout action 
    end 
    end 

    # checkout form posts to this action 
    def handleCheckout 
    end 
end 

И если handleCheckout предназначен для использования в качестве post Тогда выше метод не может работать, так как redirect_to создаст новый http Get запрос к этому действию. поэтому вы можете попробовать что-то вроде этого:

def checkout 
    pid = params[:pid] 
    product = Product.find(pid) 
    if product.... 
     handleCheckout 
     # params since is a global hash and above method has access to it 
    end 
end 

# checkout form posts to this action 
def handleCheckout 
    # your other code 
    redirect_to 'some_action' and return 
    # in above line you have to return with a render or redirect 
    # Otherwise it will render 'checkout' template with render and redirect or 
    # it will throw double render error if you have a simple render or redirect without explicit return 
end 

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

Смежные вопросы