如何使用AJAX在页面上呈现我的基本注册/登录表单而不是重定向?

时间:2013-05-09 05:39:20

标签: ruby-on-rails ajax jquery

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

这是我的控制器

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化注册和登录过程的解决方案。

谢谢!

2 个答案:

答案 0 :(得分: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响应

答案 1 :(得分:0)

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

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

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

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