2011-11-08 23 views
0

这基本上是一种无资源形式,但其他示例似乎不起作用。我使用魔法和formtastic。 formtastic工作就好了新用户的形式,但我似乎无法创建一个新的会话...使用Formtastic与巫术。我如何设置登录表单?

<%= semantic_form_for 'sessions', :url => sessions_path, :method => :post do |f| %> <%= f.inputs do %> <%= f.input :email %> <%= f.input :password %> <% end %> <%= f.buttons %> <% end %>

这是接近,但它输出

<input id="sessions_email" name="sessions[email]" type="text" />

而不是

<input id="sessions_email" name="email" type="text" />

所以当我提交表单,我得到一个TEMPL吃失踪错误

`模板丢失

缺少模板节/创建,应用程序/用{创建:处理程序=> [:ERB,:建设者,:咖啡]:格式=> [:HTML] :locale => [:en,:en]}。 `

我想我只需要知道如何设置具体的形式的'名称'属性,但这似乎有点破解。有没有更多'语义'的方式来做到这一点?请帮助谢谢。

编辑:这里的每个请求的控制器代码...

class UsersController < ApplicationController 
    before_filter :authenticate, :except => [:show, :new, :create] 
    before_filter :correct_user, :only => [:edit, :update] 
    before_filter :admin_user, :only => :destroy 


    def index 
    @title = "All users" 
    @users = User.paginate(:page => params[:page])  
    end 

    def show 
    @user = User.find(params[:id]) 
    @microposts = @user.microposts.paginate(:page => params[:page], :per_page => 6) 
    @title = @user.name 
    end 

    def new 
    @user = User.new 
    @title = 'Sign up' 
    end 

    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     Notifier.registration_confirmation(@user).deliver 
     sign_in @user 
     flash[:success] = "Welcome!" 
     redirect_to @user 
    else 
     @title = "Sign up" 
     render 'new' 
    end 
    end 

    def edit 
    @user = User.find(params[:id]) 
    @title = "Edit user" 
    end 

    def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(params[:user]) 
     flash[:success] = "Profile updated." 
     redirect_to @user 
    else 
     @title = "Edit user" 
     render 'edit' 
    end 
    end 

    def destroy 
    User.find(params[:id]).destroy 
    flash[:success] = "User Removed" 
    redirect_to users_path 
    end 

    def following 
    @title = "Following" 
    @user = User.find(params[:id]) 
    @users = @user.following.paginate(:page => params[:page]) 
    render 'show_follow' 
    end 

    def followers 
    @title = "Followers" 
    @user = User.find(params[:id]) 
    @users = @user.followers.paginate(:page => params[:page]) 
    render 'show_follow' 
    end 

    private 

    def has_valid_signup_code?(code) 
     code == valid_signup_code 
    end 

    def correct_user 
     @user = User.find(params[:id]) 
     redirect_to(root_path) unless current_user?(@user) 
    end 

    def admin_user 
     redirect_to(root_path) unless current_user.admin? 
    end 

end 

的感谢!

+0

的问题是不是这个名字的输入,应该没问题。它可能是关于你在会话控制器的创建操作中所做的事情。你能提供代码吗? – tbk

+0

代码提供!再次感谢。 – afxjzs

+0

你可能也有一个sessions_controller.rb不是吗?该代码会更有趣;) – tbk

回答

0

您可能在成功登录后缺少某种重定向。这是怎么创造我的会话动作控制器看起来像(注意我的控制器命名为UserSessionsController而不是SessionsController):

def create 
    if @user = login(params[:session][:email], params[:session][:password]) 
    redirect_back_or_to root_path, :notice => I18n.t("user_sessions.login_success") 
    else 
    flash.now[:alert] = I18n.t("user_sessions.login_failure") 
    render :action => :new 
    end 
end 

这是登录表单:

= semantic_form_for 'session', :url => user_sessions_path do |f| 
    = f.inputs do 
    = f.input :email 
    = f.input :password 

    = f.buttons do 
    = f.commit_button 
相关问题