也许我只是盯着这个太长时间,但我有一个基本的注册和登录表单,我建立,并希望只在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化注册和登录过程的解决方案。
谢谢!
答案 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请求。