0

也许我只是盯着这个太久了,但是我有一个我构建的基本注册和登录表单,并且只想在 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”是我要呈现表单的地方。

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

谢谢!

4

2 回答 2

0

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

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

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

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

于 2013-05-09T08:18:23.090 回答
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 响应

于 2013-05-09T05:57:15.323 回答