这有点违反了rails惯例,但我试图让一个控制器管理用户会话身份验证和用户注册。我正在弄清楚如何解决这个问题。
到目前为止,我正在合并用户控制器和会话控制器,并使用'new'方法提供新的用户和新的用户实例。
虽然使用rails 3中的新路由,但我无法确定如何为这些项目生成表单。
以下是代码:
class UserController < ApplicationController
def new
@user_session = UserSession.new
@user = User.new
end
def create_user
@user = User.new(params[:user])
if @user.save
flash[:notice] = "Account Successfully Registered"
redirect_back_or_default signup_path
else
render :action => new
end
end
def create_session
@user_session = UserSession.new(params[:user_session])
if @user_session.save
flash[:notice] = "Login successful!"
redirect_back_or_default login_path
else
render :action => new
end
end
end
<div id="login_section">
<% form_for @user_session do |f| -%>
<%= f.label :email_address, "Email Address" %>
<%= f.text_field :email %>
<%= f.label :password, "Password" %>
<%= f.text_field :password %>
<%= f.submit "Login", :disable_with => 'Logining...' %>
<% end -%>
</div>
<div id="registration_section">
<% form_for @user do |f| -%>
<%= f.label :email_address, "Email Address" %>
<%= f.text_field :email %>
<%= f.label :password, "Password" %>
<%= f.text_field :password %>
<%= f.label :password_confirmation, "Password Confirmation" %>
<%= f.text_field :password_confirmation %>
<%= f.submit "Register", :disable_with => 'Logining...' %>
<% end -%>
</div>
我想我需要使用:url =&gt;这些形式的东西,但我不确定如何指定。
在routes.rb中我还没有指定Usersor UserSessions作为资源(不相信这是最好的方法......但我可以)。
但是,我希望在同一页面上注册和登录,并通过执行以下操作实现此目的:
match 'signup' => 'user#new'
match 'login' => 'user#new'
解决这个问题的最佳方法是什么?
答案 0 :(得分:2)
在表单上,您可以通过执行以下操作来详细说明网址:
<% form_for @user_session, :url => { :action => 'create_session' } do |f| -%>
请注意,定义“create_session”等操作名称会产生“非资源路径”。我建议您在routing和forms上查看Rails指南,以帮助您更清楚地了解您要完成的工作。
答案 1 :(得分:0)
为此使用单独的控制器是否没有意义?我的想法只是使用第三个控制器(不是会话或用户),如“静态页面”,然后在该控制器中使用这两个操作。这似乎更符合Rails惯例,但我并不积极。