错误后在模型中重定向

时间:2016-05-04 18:36:30

标签: ruby-on-rails redirect

我的模型中有一个函数可以从CSV文件导入数据,如果有任何错误,我想要验证。例如,当我上传文件时,我会根据文件中的ID搜索User。如果没有User个ID,我想redirect_to另一个页面出错。

def self.getUser(scale_id)
    @user = User.find_by(scale_id: scale_id)
    if @user == nil
        redirect_to users_path
    else
        return @user
    end
end

def self.bulk_upload_weigh_ins(file)
    output = []
    errors = []
    CSV.foreach(file.path, headers: true, ) do |row|
        row = row.to_hash
        @scale_id = row["scale_id"]
        @user = getUser(@scale_id)
        row.merge!(user_id: @user_id)
        WeighIn.create! row.to_hash
    end
end

......无论我放在哪条路上,我都会得到以下信息:undefined local variable or method 'users_path' for #<Class:0x007fa06f466998>即使它是有效路径。

这样重定向有什么问题吗?如果是,我应该怎么做?

2 个答案:

答案 0 :(得分:0)

自定义验证的最简洁方法是执行以下操作:

在你的模特中:

User < ActiveRecord::Base

validate :get_user

def initialize(params={})
   self.id = params[:id]
end

def get_user
  @user = User.find_by(self.id)
    if @user.nil?
        errors.add(:base, "Invalid User")
        return false
    else
        return @user
    end
end

然后在您的控制器中执行:

def whatever_action_youre_using
   @user = User.new(user_params)
   unless @user.valid?
     redirect_to users_path
   end
end


def user_params
  params.require(:user).permit(:first_name, :email, :etc, :whatever_your_atts)
end

答案 1 :(得分:0)

  

我的模型中有一个函数正在搜索基于的用户   ID

     

未定义的局部变量或方法'users_path'   类:0x007fa06f466998

在评论中提到 @Dave Newton 时, 路径助手 在模型中不可用,除非您特别包括它们。此外,您不能也永远不需要在 模型 中使用redirect_to。应将应用程序逻辑移动到控制器。像下面的东西应该工作

def get_user
  @user = User.find_by(scale_id: params[:user][:scale_id])
  if @user.nil?
    redirect_to users_path, notice: 'Your error message here'
  else
    return @user
  end
end