辅助函数不起作用

时间:2015-10-16 15:13:13

标签: ruby-on-rails helper

ItemsSource
MeditationDiaryListView

问题是users_controller.rb class UsersController < ApplicationController include UsersHelper def new @user = User.new end def create if isUsernameTaken? render 'new' elsif isEmailTaken? render 'new' else @user = User.new(user_params) if @user.save else render 'new' end end end private def user_params params.require(:user).permit(:username,:email,:password,:password_confirmation) end end users_helper.rb module UsersHelper def isUsernameTaken? !(User.find_by(username: params[:username]).nil?) end def isEmailTaken? !(User.find_by(email: params[:email]).nil?) end end 永远不会被执行,即使我再次提供相同的用户名,也始终会执行isUsernameTaken?部分。为什么会这样?

1 个答案:

答案 0 :(得分:3)

这是因为params[:username]params[:email]在您的控制器中始终为空。它们应为params[:user][:username]user_params[:username]

无论如何,这些检查属于模型,而不是控制器,并且已经有验证器可以完全按照您的要求进行:

class User < ActiveRecord::Base
  validates :email, :username, uniqueness: true
end