在控制器之间传递参数 Devise Ruby on Rails



为了预订课程,用户必须先注册。然后,我希望用户在注册表单之前被重定向到他们所在的课程页面。

我正在尝试通过参数传递course_id,在注册表单页面上我可以看到它们已添加到参数中,但我无法将参数添加到控制器中的路径中。

有什么想法吗?下面的代码将course_id强制为数字 6,这有效。我只需要将这个整数作为参数传入的变量。

在用户注册后设计具有重定向的控制器

    def after_sign_in_path_for(resource_or_scope)
#       user_path(resource)
        new_booking_path(course_id: 6)
    end

课程显示页面(如果尚未登录,则引导用户设计注册页面。我已经从参数中添加了course_id(

<%= link_to "BOOK NOW", new_user_registration_path(course_id: @course.id),  class: "ice-btn light-btn dark-btn" %>

因此,从这里我需要将此参数传递到注册表单中,以便控制器中的course_id添加了正确的变量。我应该在包含变量的设计表单中添加一个隐藏字段吗?

设计注册表格

<div class="row no-gutters">
<div class="col-md-6 offset-md-3 forms card">
<div class="form-header">
<h2>In order to book a course we just need some details from you so that you can login at a later stage to view the courses you have enrolled on.</h2>
  </div>
  <div class="form-inner">
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= render 'shared/devisemessage' %>
   <div class="field">
    <%= f.label "First Name" %>
    <%= f.text_field :fname %>
  </div><br />
   <div class="field">
    <%= f.label "Surname" %>
    <%= f.text_field :lname %>
  </div><br />
  <div class="field">
    <%= f.label :email %>
    <%= f.email_field :email, autofocus: true %>
  </div><br />
  <div class="field">
    <%= f.label :password %>
    <% if @minimum_password_length %>
    <em>(<%= @minimum_password_length %> characters minimum)</em>
    <% end %>
    <%= f.password_field :password, autocomplete: "off" %>
  </div><br />
  <div class="field">
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation, autocomplete: "off" %>
  </div><br />
  <div class="actions">
    <%= f.button "Proceed to Booking page", class: "ice-btn light-btn dark-btn" %>
  </div>
<% end %>
<%= render "devise/shared/links" %>
</div>
</div>
</div>

Devise 已经介绍了这个问题。

设计登录后重定向到页面

基本上你需要定义after_sign_in_path_for

最新更新