#<AsistenciaController:0x00000000083450> 的未定义局部变量或方法“asistencia_params”

undefined local variable or method `asistencia_params' for #<AsistenciaController:0x00000000083450>

提问人:Edrei Beltrán 提问时间:6/11/2023 更新时间:6/12/2023 访问量:40

问:

class AsistenciaController < ApplicationController
  def asistencia
    @username = params[:user_username]
    @entry = params[:user_entry]
    if @asistencia.update(asistencia_params)
      redirect_to asistencia_path, notice: "Asistencia Guardada"
    else 
      render :edit, status: :unprocessable_entity
    end
  end
end

undefined local variable or method `asistencia_params' for #<AsistenciaController:0x00000000083450>

我希望能够使用名称更新条目

我想强调的是,在其他控制器中,所有用户名、条目都已定义。

ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 编译器错误

评论

3赞 Les Nightingill 6/11/2023
您需要自己定义方法。它是惯用的 rails 控制器语法,用于调用“强参数”保护和参数哈希清理。请参阅 guides.rubyonrails.org/...asistencia_params
0赞 Rockwell Rice 6/12/2023
在另一个控制器中,查看参数的定义位置。这就是您需要在此控制器中添加的内容,可能在文件底部的关键字下(但如果这些是自定义构建的文件,则可能不是)。这个控制器需要一些类似的东西,你列入白名单的值将特定于这个对象,参数的名称也会像上面的评论提到的那样。privatedef user_params
1赞 tgf 6/12/2023
你可以直接从 rails 本身得到一个这样的例子。尝试(在干净的树枝上)。它将生成一个 ,在底部,您会找到一个包含以下方法的方法: .您希望添加适用于表单可接受参数的类似方法。bundle exec rails g scaffold Post title:string body:stringposts_controller.rb#post_paramsparams.require(:post).permit(:title, :body)

答:

1赞 jansha 6/12/2023 #1

您必须在控制器中定义方法asistencia_params如下所示。

def asistencia_params
  #here you can permit or do whatever you want
  (eg params assignment or permiting only required params for processing)
  params.require(:asistencia).permit(:user_name, :user_entry, etc..)

end