我目前有一个应用,访问者可以使用devise通过AJAX表单进行注册。
我想增强此表单并执行以下操作:
因此,我一直在考虑进行三个连续的AJAX调用,但是我陷入了困境。
这是我第一部分所做的事情(从订阅选择表到注册表):
meals / index.html.erb:
<% if current_user == nil %>
<%= render partial: 'subscriptions/subscription_selection' %>
<% end %>
subscriptions / _subscription_selection.html.erb:
<!-- some blabla -->
<%= form_tag save_subscription_choice_path, method: "get", remote: true do %>
<%= hidden_field_tag 'chosen_subscription', '22'%>
<%= submit_tag 'CHOISIR CETTE FORMULE', class: 'btn btn-primary' %>
<% end %>
subscription_controller.rb:
def save_subscription_choice
@subscription_choice_id = params['chosen_subscription']
respond_to do |format|
format.js
end
end
config / routes.rb:
get "subscriptions/save_subscription_choice", to: "subscriptions#save_subscription_choice", as: "save_subscription_choice"
subscriptions / save_subscription_choice.js.erb:
$(".subscription-selection-modal").html("<%= escape_javascript(render partial: 'meals/signup_modal') %>");
console.log('save_subscription_choice.js.erb succesfully loaded');
,错误日志为:
Started GET "/subscriptions/save_subscription_choice?utf8=%E2%9C%93&chosen_subscription=12&commit=CHOISIR+CETTE+FORMULE" for 127.0.0.1 at 2018-08-29 15:48:04 +0200
Processing by SubscriptionsController#show as JS
Parameters: {"utf8"=>"✓", "chosen_subscription"=>"12", "commit"=>"CHOISIR CETTE FORMULE", "id"=>"save_subscription_choice"}
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)
Started GET "/users/sign_in.js" for 127.0.0.1 at 2018-08-29 15:48:04 +0200
Processing by Devise::SessionsController#new as JS
Completed 406 Not Acceptable in 1ms (ActiveRecord: 0.0ms)
ActionController::UnknownFormat (ActionController::UnknownFormat):
我不知道为什么该应用程序调用/users/sign_in.js,它甚至不在我自己的代码中(我猜可能是一个设计文件?)
关于如何进行这项工作的任何想法?
答案 0 :(得分:0)
好的,所以这实际上是路由器问题。
在我的config/routes.rb
中,首先提到了订阅#index和订阅#show的路线:
resources :subscriptions, only: [:index, :show]
get "subscriptions/save_subscription_choice", to: "subscriptions#save_subscription_choice", as: "save_subscription_choice"
这实际上是在使我的应用程序调用show方法。
我简单地切换了这两行,现在可以完美运行了。
正如@arieljuod指出的,第二个问题是:设计授权。
由于在我的应用中默认情况下将用户身份验证before_action设置为true,因此我必须在订阅控制器中添加以下行:skip_before_action :authenticate_user!, raise: false, only: [:save_subscription_choice]