我的模型中有一个函数可以从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>
即使它是有效路径。
这样重定向有什么问题吗?如果是,我应该怎么做?
答案 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