2013-08-28 52 views
0

我在做一个验证应用程序。我有这样的代码我定义了一个方法,但仍然收到错误'rails undefined method'

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    @title = "User Sign Up"  
    end 
    def create 
    @user = User.new(params[:user]) 
    sign_in_check @user 
    if @user.save 
     #flash[:status] = true 
     #flash[:alert] = "You have successfully signed up!!" 
     #sign_in_check @user 
     redirect_to root_path, :flash => { :success => "Welcome to the Bakeshop"} 
    else 
     @title = "User Sign Up" 
     render 'new' 
    end 
    end 
end 

这是一个简单的注册代码,每当我尝试注册,轨道返回一个错误:

undefined method `sign_in_check' for #<UsersController:0x68c0a90> 

,但我在Users_helper.rb定义的方法sign_in_check

module UsersHelper 
    def sign_in_check(user) 
    #some stuff to enable session 
    end 
end 

有没有人有一个想法,为什么发生这种情况,以及如何解决它?

回答

3

原因是你的方法是一个帮手。默认情况下,助手将在视图中使用匹配的名称,但不对未经设置的控制器开放。

两种方法来解决:

  1. 在UsersController

    class UsersController < ApplicationController 
        helper :user #This will expose UsersHelper module to UsersController 
    
  2. 允许这个助手相反,把这种方法引入的ApplicationController。由于方法的本质,我更喜欢这个。

+0

哦,所以这就是为什么。谢谢。 –

0

这通常是放置在应用程序控制器

class ApplicationController < ActionController::Base 

    def sign_in_check(user) 
    #some stuff to enable session 
    end 

end 

辅助函数被用于视图。如果你想同时使用它 - 你可以做到这一点,但这听起来不像你在这里寻找的东西。

1

包括您UserHelperUserController如下,你应该能够使用助手中定义的任何方法。

class UsersController < ApplicationController 
    include UsersHelper 

    ... 
end 
0

只包括你的助手模块控制器

class UsersController < ApplicationController 
    helper :user 
    ... 
    end 

感谢

相关问题