Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么这些强大的参数返回“a”;“未找到参数”;错误_Ruby On Rails_Ruby On Rails 4_Fetch_Nested Attributes_Strong Parameters - Fatal编程技术网

Ruby on rails 为什么这些强大的参数返回“a”;“未找到参数”;错误

Ruby on rails 为什么这些强大的参数返回“a”;“未找到参数”;错误,ruby-on-rails,ruby-on-rails-4,fetch,nested-attributes,strong-parameters,Ruby On Rails,Ruby On Rails 4,Fetch,Nested Attributes,Strong Parameters,我有两个模型,一个是简介模型,一个是工作模型。配置文件包含多个作业,而作业属于配置文件。我使用cacoon gem来创建嵌套表单。在我的应用程序中,有人创建一个配置文件,然后他们可以添加作业。因此,当他们进行第一个作业时,配置文件已经创建,作业没有创建,表单数据将转到更新操作(因为配置文件已经存在,即使没有作业存在)。问题是,由于还没有作业,我收到了错误信息: param not found: profile 以下是我尝试使用的参数: def profile_params para

我有两个模型,一个是简介模型,一个是工作模型。配置文件包含多个作业,而作业属于配置文件。我使用cacoon gem来创建嵌套表单。在我的应用程序中,有人创建一个配置文件,然后他们可以添加作业。因此,当他们进行第一个作业时,配置文件已经创建,作业没有创建,表单数据将转到更新操作(因为配置文件已经存在,即使没有作业存在)。问题是,由于还没有作业,我收到了错误信息:

param not found: profile
以下是我尝试使用的参数:

def profile_params
      params.require(:profile).permit(:title, :category, :description, :state, :zip_code, :rate, jobs_attributes: [:firm, :position, :category, :description, :begin, :end, :_destroy])
end
然后,根据另一篇堆栈溢出文章的建议,我切换到以下代码:

def profile_params
      params.fetch(:profile, {}).permit(:title, :category, :description, :state, :zip_code, :rate, jobs_attributes: [:firm, :position, :category, :description, :begin, :end, :_destroy])
end

使用第二个profile_参数(带有fetch的参数),页面将加载一条成功的flash消息,但实际上没有创建作业。我认为取回不起作用。有什么办法让它工作吗?谢谢。

您确定params[:profile]确实存在吗?只是为了验证,记录它(
Rails.logger.debug(params)
)并检查您的
development.log
文件。它的存在是因为我在创建配置文件时没有任何问题。当它到达更新操作并且没有作业存在时。如何登录?我试着在控制台中输入Rails.logger.debug(params),但我不认为我应该这样做?感谢您的帮助。您可以将其设置为正确的
profile_params
函数,并且每当该函数被调用时,它都会将其打印到您的
development.log
文件(或者更确切地说是您正在运行的w.e环境)。在终端窗口中,您可以键入
tail-f log/development.log
打开日志文件并对其进行监视。当我将行Rails.logger.debug(params)添加到profile_params方法的末尾时,我收到以下通知:“未定义方法
stringify_key”表示true:TrueClass”。当我运行'tail-f log/development.log'时,我得到:'NoMethodError(未定义的方法
stringify_key'for true:TrueClass):app/controllers/profiles_controller.rb:37:在'update'之前添加它。如果将其作为函数中的最后一行,它将被视为return语句,这将影响
update()
调用。