我正在rails中实现一个程序,其中有一个表单,在提交表单后,它将检查是否有任何记录具有数据库中特定字段的重复值。我的数据库表是学生。所以我对应的型号名称是Student。我正在我的控制器中编写这段代码(我刚才讨论过)。 但我面临以下错误。我正在使用一些数组进行内部操作。当我在ruby中编写特定函数(而不是rails)时,它工作正常。此外,由于使用"长度"
,我也面临错误我的错误是: StudentsController中的NoMethodError #create
未定义的方法`[]'为零:NilClass
我的控制器代码是:
class StudentsController < ApplicationController
def new
@student=Student.new
@students=Student.all
end
def create
@student=Student.new(u_params)
ret_val=string_check
if ret_val==1
@student.save
redirect_to new_student_path , :notice => "Inserted!!!"
else
redirect_to new_student_path , :notice => "Match,Not inserted!!!"
end
end
def u_params
params.require(:student).permit(:id ,:firstname, :lastname)
end
def u_params_second
params.require(:student).permit(:firstname)
end
def string_check
count =0;
#temp1=:firstname
temp1=params[:firstname]
supplied_val=temp1
puts "Entered in string_check method"
for i in 46..100
temp2=Student.find_by(id:i)
table_val=temp2.firstname
size1=supplied_val.to_s.length
size2=table_val.to_s.length
arr1=Array.new
arr2=Array.new
# arr1[i] ||= []
# arr2[i] ||= []
for i in 0..size1
arr1.push(supplied_val[i])
end
for i in 0..size2
arr2.push(table_val[i])
end
for i in 0..size1
if arr1[i]=="@" || arr1[i]=="#" || arr1[i]=="{" || arr1[i]=="}" || arr1[i]=="(" || arr1[i]==")" || arr1[i]=="[" || arr1[i]=="]" || arr1[i]=="." || arr1[i]==";" || arr1[i]=="," || arr1[i]=="%" || arr1[i]=="&" || arr1[i]=="*" || arr1[i]=="!" || arr1[i]=="?" || arr1[i]=="$" || arr1[i]=="^" || arr1[i]==":" || arr1[i]=="-" || arr1[i]=="/"
count=count+1
# puts count
arr1[i]=""
end
end
# puts arr1
puts arr1.join
final1=arr1.join
for i in 0..size2
if arr2[i]=="@" || arr2[i]=="#" || arr2[i]=="{" || arr2[i]=="}" || arr2[i]=="(" || arr2[i]==")" || arr2[i]=="[" || arr2[i]=="]" || arr2[i]=="." || arr2[i]==";" || arr2[i]=="," || arr2[i]=="%" || arr2[i]=="&" || arr2[i]=="*" || arr2[i]=="!" || arr2[i]=="?" || arr2[i]=="$" || arr2[i]=="^" || arr2[i]==":" || arr2[i]=="-" || arr2[i]=="/"
count=count+1
# puts count
arr2[i]=""
end
end
# puts arr2
puts arr2.join
final2=arr2.join
if final1==final2
flag=0
else
flag=1
end
return flag
end
end
end
routes.rb文件是:
Rails.application.routes.draw do
resources :students
end
答案 0 :(得分:0)
我的错误是:StudentsController中的NoMethodError #create
未定义的方法`[]&#39;为零:NilClass
它只是意味着您尝试访问某些实际上是SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(IF(week_00 = ''',
week_00,
''', QtySold, 0)) AS `',
week_00, '`'
)
) INTO @sql
FROM week_report1;
SET @sql = CONCAT('SELECT Code, ', @sql, ' FROM week_report1 GROUP BY Code');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
对象的数组,而不是数组。
为了摆脱这个错误,你可以在Ruby中使用一种称为短路的技术。
让我们说你的下面一段代码产生了上述错误:
nil
您可以使用arr1[i]
这样的条件:
if
或者使用这样的短路技术:
if arr1
arr1[i]
end
答案 1 :(得分:0)
如果您确定相关的代码段适用于ruby并且它不适用于rails,则问题很可能是由于内部和外部循环使用的变量i
。无论如何,这需要先修复,否则只会导致意外行为。
外圈:
for i in 46..100
内圈:
for i in 0..size1
for i in 0..size2
...
将i
保留为外循环,并将内循环迭代器更改为j
希望它有助于:)
答案 2 :(得分:0)
添加@harish和@arslan的答案,可能会出现
temp2=Student.find_by(id:i)
可能失败的情况,因为可能没有该ID的学生。
强>
因此,temp2当时可能会返回零。
for i in 0..size2
arr2.push(table_val[i]) // this may get failed
end
然后arr2.push将无效,因为table_val [i]为nil,因此nil类有可能存在未定义的方法[]。