Ajax 如何使用Desive将Rails 3中的登录和注册页面结合起来?
这就是我的Ajax 如何使用Desive将Rails 3中的登录和注册页面结合起来?,ajax,ruby-on-rails-3,login,devise,Ajax,Ruby On Rails 3,Login,Devise,这就是我的designe/sessions/new.html.erb的样子: <div id="sign_in"> <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> <%= f.text_field :f_name, :value => "First Name", :class =>
designe/sessions/new.html.erb
的样子:
<div id="sign_in">
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
<%= f.text_field :f_name, :value => "First Name", :class => "clearField curved" %><div class="error"></div><br />
<%= f.text_field :l_name, :value => "Last Name", :class => "clearField curved" %><div class="error"></div><br />
<%= f.text_field :username, :value => "Username", :class => "clearField curved" %><div class="error"></div><br />
<%= f.password_field :password, :value => "Password", :class => "clearField curved" %><div class="error"></div><br />
<%= f.password_field :password_confirmation, :value => "Password", :class => "clearField curved" %><div class="error"></div><br />
<%= f.text_field :email, :value => "Email Address", :class => "clearField curved" %><div class="error"></div><br />
<div id="login_buttons">
<%= f.submit "Sign in", :id => "login", :value => "Submit", :class => "curved" %>
<%= f.submit "Sign in", :id => "register", :value => "Register", :class => "curved" %>
<%= f.submit "Send Reset Instructions", :id => "pass-reset", :value => "Send Reset Instructions", :class => "curved"%>
<a href="#" id="forgot-pw">Forgot pass?</a>
</div>
<% end %>
</div>
“我的路线”文件的适用部分如下所示:
devise_for :users, :path_names => { :sign_up => "register",
:sign_in => "login",
:sign_out => "logout" }
devise_scope :user do
get "login", :to => "devise/sessions#new"
get "register", :to => "devise/registrations#new"
get "logout", :to => "devise/sessions#destroy"
所以我想要的行为如下:
用户登录时,只会看到两个表单字段(用户名+密码)。他们按enter键,然后登录
如果他们按“注册”,而不进行页面加载,我希望正确的表单(需要附加表单字段:名字、姓氏等)出现,当他们按enter键时,它进行注册。我还希望URL从myapp.com/login
更改为myapp.com/register
——无需页面加载。如果他们在未填写表单的情况下按“登录”,则会将他们带回登录页面(myapp.com/login
),只显示两个字段(用户名+密码)
这样,当我直接链接到myapp.com/register
时,它会直接进入带有正确表单字段的页面,并且功能正常
基本上,功能类似于github现在在不刷新页面(但URL会更改)的情况下通过repo管理浏览的方式
建议?要将用户注册与用户登录结合在同一页面上,我做了以下操作:
1) 将视图/会话/新建中的所有代码复制到视图/注册/新建中
2) 修改提交按钮id/js命名空间:
<%= f.submit 'submit_button', :style => "display: none", :id => "submitSignInForm" %><br>
<a class="button" href="javascript:document.getElementById('submitSignInForm').click();"> Sign in </a>"
“显示:无”,:id=>“SubmitSignInfo”%>
"
3) 使用重定向覆盖Desive会话控制器新方法。创建控制器/sessions\u controller.rb并插入以下代码。注意控制器类继承自注册,而不是会话!
class SessionsController < Devise::RegistrationsController
def new
redirect_to new_user_registration_path
end
end
class sessioncontroller
*我应该注意,这在rails 2.3.5中起作用,但我认为它在3.0中也会起作用。为了将用户注册与用户登录结合在同一页面上,我做了以下操作:
1) 将视图/会话/新建中的所有代码复制到视图/注册/新建中
2) 修改提交按钮id/js命名空间:
<%= f.submit 'submit_button', :style => "display: none", :id => "submitSignInForm" %><br>
<a class="button" href="javascript:document.getElementById('submitSignInForm').click();"> Sign in </a>"
“显示:无”,:id=>“SubmitSignInfo”%>
"
3) 使用重定向覆盖Desive会话控制器新方法。创建controllers/sessions_controller.rb并插入以下代码。注意控制器类继承自注册,而不是会话
class SessionsController < Devise::RegistrationsController
def new
redirect_to new_user_registration_path
end
end
class sessioncontroller
*我应该注意到,这在rails 2.3.5中起作用,但我认为它在3.0中也会起作用。你找到解决这个问题的方法了吗?实际上我没有。我只是把它们分成两页。然而,内尔索尼佐下面的回答看起来很有趣。我没有试过,但如果你试过,并且说它有效,我会将它标记为已接受。你找到解决这个问题的方法了吗?实际上我没有。我只是把它们分成两页。然而,内尔索尼佐下面的回答看起来很有趣。我还没有试过,但如果你试过并说它有效,我会将它标记为已接受。