我定义了一个方法,但仍然收到错误'rails undefined method'

时间:2013-08-28 06:52:46

标签: ruby-on-rails ruby

我正在进行身份验证申请。我有这个代码

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

这是一个简单的注册代码,每当我尝试注册时,rails都会返回错误:

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

但我在sign_in_check中定义了一个方法Users_helper.rb

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

有没有人知道为什么会这样,以及如何解决它?

4 个答案:

答案 0 :(得分:3)

原因是你的方法是一个帮手。默认情况下,助手将在具有匹配名称的视图中可用,但如果没有设置,则不会向控制器打开。

两种解决方法:

  1. 在UsersController中允许此帮助程序

    class UsersController < ApplicationController
      helper :user #This will expose UsersHelper module to UsersController
    
  2. 相反,将此方法放入ApplicationController中。由于方法的性质,我更喜欢这个。

答案 1 :(得分:1)

UserHelper包含在UserController中,如下所示,您应该可以使用帮助程序中定义的任何方法。

class UsersController < ApplicationController
  include UsersHelper

  ...
end

答案 2 :(得分:0)

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

class ApplicationController < ActionController::Base

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

end

助手用于观看。如果你想在两者中使用它 - 你可以这样做,但这听起来不像你在这里寻找的那样。

答案 3 :(得分:0)

只需在控制器中包含辅助模块

  class UsersController < ApplicationController
     helper :user 
   ...
  end

由于