controlador de aplicativo web Ruby on Rails gera erro
-
20-12-2019 - |
Pergunta
Estou acompanhando uma série de vídeos, onde o autor está criando um CMS simples usando RoR 4, mas atualmente tenho o RoR 3.x instalado.Segui todo o código até um "T", mas quando tento criar um assunto simples no CMS simples, recebo um erro.Então eu verifiquei o log/production.log
E estou recebendo o seguinte erro,TypeError (no implicit conversion of Symbol into String):
O código do controlador se parece com o seguinte,
def create
# Instantiate a new object using form parameters
# the below line should work with rails v3.x
# @subject = Subject.new(params[:subject])
@subject = Subject.new(subject_params)
# Save the object
if @subject.save
# add flash hash
flash[:notice] = "Subject created successfully."
# if save succeeds, redirect to the index action
redirect_to(:action => 'index')
else
# if save fails, redisplay the form so user can fix problems
render('new')
end
end
E o método privado que criei para o assunto novos parâmetros se parece com o seguinte
private
def subject_params
# same as using "params[:subject]", except that it:
# - raises an error if :subject is not present
# - allows listed attributes to be mass-assigned
params.require(:subject).permit(:name, :position, :visible)
end
Solução
O autor diz que você precisa mudar @subject = Subject.new(subject_params)
para @subject = Subject.new(params[:subject])
.
params.require(:subject).permit(:name, :position, :visible)
é um recurso do Rails 4 chamado Parâmetros Fortes.Se você é novo no Rails, eu sugiro que você use a versão que o autor usa para aliviar problemas de versões futuras como este.