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中也会起作用。

你找到解决这个问题的方法了吗?实际上我没有。我只是把它们分成两页。然而,内尔索尼佐下面的回答看起来很有趣。我没有试过,但如果你试过,并且说它有效,我会将它标记为已接受。你找到解决这个问题的方法了吗?实际上我没有。我只是把它们分成两页。然而,内尔索尼佐下面的回答看起来很有趣。我还没有试过,但如果你试过并说它有效,我会将它标记为已接受。