为了预订课程,用户必须首先注册。然后我希望用户被重定向到他们在注册表单之前所在的课程页面。
我试图通过参数传递course_id,我可以在注册表单页面上看到它们被添加到参数中,但我无法将参数添加到控制器中的路径中。
有什么想法吗?下面的代码将course_id作为数字6强制输入,这是可行的。我只需要将这个整数作为参数传入的变量。
设计控制器,在用户注册后重定向
def after_sign_in_path_for(resource_or_scope)
# user_path(resource)
new_booking_path(course_id: 6)
end
课程显示页面(如果用户尚未登录,则转至devise注册页面。我已经从参数中添加了course_id )
<%= link_to "BOOK NOW", new_user_registration_path(course_id: @course.id), class: "ice-btn light-btn dark-btn" %>
因此,从这里开始,我需要将此参数传递给注册表单,以便控制器中的course_id添加了正确的变量。我应该在devise表单中添加一个包含变量的隐藏字段吗?
设计注册表单
<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>
发布于 2018-04-19 20:10:09
https://stackoverflow.com/questions/49925949
复制相似问题