0

我正在做一个身份验证应用程序。我有这个代码

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

4 回答 4

3

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

两种修复方法:

  1. 在 UsersController 中允许这个助手

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

于 2013-08-28T06:56:57.780 回答
1

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

class UsersController < ApplicationController
  include UsersHelper

  ...
end
于 2013-08-28T06:57:22.033 回答
0

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

class ApplicationController < ActionController::Base

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

end

助手用于视图。如果您想在两者中使用它 - 您可以这样做,但这听起来不像您在这里寻找的东西。

于 2013-08-28T06:55:58.480 回答
0

只需将您的帮助模块包含在您的控制器中

  class UsersController < ApplicationController
     helper :user 
   ...
  end

谢谢

于 2013-08-28T06:59:11.713 回答