【发布时间】:2016-06-28 09:18:17
【问题描述】:
我在 Rails 中实现了一个程序,其中有一个表单,提交表单后,它将检查数据库中是否有任何记录与特定字段的重复值。我的数据库表是学生。所以我对应的模型名称是Student。我正在我的控制器中编写这段代码(我刚刚讨论过的)。 但我面临以下错误。我正在使用一些数组进行内部操作。当我仅在 ruby(而不是 rails)中编写该特定功能时,它工作正常。此外,由于使用“长度”,我也面临错误。
我的错误是: StudentController 中的 NoMethodError#create
nil: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
【问题讨论】:
-
向我展示您的路线和查看文件,并执行 puts "#{ @student.to_json}"
-
你能分享一下你在哪一行得到
undefined method[]' for nil:NilClass` 错误的详细信息吗? -
与您的问题无关,但考虑使用 Array#Include?而不是长 OR。例如
if ["@", "#", "{" , ... etc].include?(arr1[i]) -
另外,不要使用
for,它非常不符合Ruby。请改用map或each。
标签: ruby-on-rails arrays ruby postgresql