2013-05-09 59 views
0

也许我只是盯着这个太长时间,但我有一个基本的注册和登录表单,我建立,并希望只呈现在一个div的同一页面,而不是重定向到一个新的页。如何使用AJAX在页面上呈现我的基本注册/登录表单而不是重新定向?

这里是我的控制器

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     session[:user_id] = @user.id 
     redirect_to root_url, notice: "Thanks for signing up!" 
    else 
     render "new" 
    end 
    end 

end 

有一个类似的会议

class SessionsController < ApplicationController 
    def new 
    end 

    def create 
    user = User.find_by_email(params[:email]) 
    if user && user.authenticate(params[:password]) 
     session[:user_id] = user.id 
     redirect_to root_url, notice: "Logged in!" 
    else 
     flash.now.alert = "Email or password is invalid." 
    end 
    end 

    def destroy 
    session[:user_id] = nil 
    redirect_to root_url, notice: "Logged out!" 
    end 

end 

,这里是单页的应用程序

<div id="user"> 
    <% if current_user %> 
    Logged in as <%= current_user.email %>. 
    <%= link_to "Log Out", logout_path, remote: true, disable_with: "Goodbye!", :class => "logout_a" %> 
    <% else %> 
    <%= link_to "Sign Up", signup_path, remote: true, disable_with: "Welcome!", :class => "signup_a" %> or 
    <%= link_to "Log In", login_path, remote: true, disable_with: "Welcome Back!", :class => "login_a" %> 
    <% end %> 
</div> 

<div class="render_here"> 
</div> 

与视图的相关部分类“render_here”是我想呈现表单的地方。

我已经尝试渲染link_to规范中的部分内容,在我的视图中使用.js.erb文件,以及通过使用Google搜索问题获得的其他一些想法,但我认为我过于复杂,并且错过了简化了注册和登录过程的AJAX化解决方案。

谢谢!

回答

0

可以使用respond_with

class UsersController < ApplicationController 
    respond_to :html, :json 
    def new 
    @user = User.new 
    respond_with @user 
    end 

    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     session[:user_id] = @user.id 
     flash[:notice] = "Thanks for signing up!" 
    end 
    respond_with @user 
    end 

end 

respond_with是聪明的格式,如果请求是在HTML中。它会响应html响应。如果请求进入json,即通过ajax。 respond_with会发送一个JSON响应

0

如果是静态页面,您可以使用

<%= render :partial => "login_form"%> 

RoR Guide上提供良好的信息。 login_form必须保存为“_login_form.erb”

如果是动态页面,当链接从该请求中点击并呈现html表单并填充div时,可以发送ajax请求以响应数据。

相关问题