Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 RubyonRails:未定义的stringify\u键_Ruby On Rails_Ruby On Rails 3_Nested - Fatal编程技术网

Ruby on rails RubyonRails:未定义的stringify\u键

Ruby on rails RubyonRails:未定义的stringify\u键,ruby-on-rails,ruby-on-rails-3,nested,Ruby On Rails,Ruby On Rails 3,Nested,我正在学习从不同的控制器渲染表单,但当我试图保存数据时,它说我得到了 NoMethodError in ProfilesController#create undefined method `stringify_keys' for "2":String 我的路由文件: resources :users do member do get 'profile' end end 配置文件模型 belongs_to :user has_one :profile 用户模型 belong

我正在学习从不同的控制器渲染表单,但当我试图保存数据时,它说我得到了

NoMethodError in ProfilesController#create
undefined method `stringify_keys' for "2":String
我的路由文件:

resources :users do
  member do
   get 'profile'
  end
end
配置文件模型

belongs_to :user
has_one :profile
用户模型

belongs_to :user
has_one :profile
views/profiles/_form.html.erb

<%= form_for [@user, @profile] do |f| %>
  ..
<% end %>
<%= render :partial => "profiles/form" %>

..
views/users/_form.html.erb

<%= form_for [@user, @profile] do |f| %>
  ..
<% end %>
<%= render :partial => "profiles/form" %>
“配置文件/表格”%>
另外,当我试图保存数据时,我被重定向到
http://localhost:3000/users/2/profiles发生错误的地方,而不是
http://localhost:3000/users/2/profile
注意档案中的
s
,它在我身上发生了变化


谢谢

我会采取稍微不同的方法。我将在用户路由中为profile嵌套一个资源路由,而不是为users-resources路由添加一个GET-member路由

# config/routes.rb
resources :users do
    resource :profiles // notice the singular resource
end
这将提供到嵌套概要文件资源的RESTfully路由所需的路由

然后,您可以完全按照指示创建表单:

# app/views/profiles/_form.html.erb
<%= form_for [@user, @profile] do |f| %>
    ...
<% end %>
我不确定这是否一定会解决您收到的错误消息,但很可能会

编辑:

关于以下注释,在您的表单中提到NilClass:Class
的未定义方法“model_name”:您收到此错误,因为没有变量被传递到您的部分作用域。渲染分部时,需要传入希望分部能够访问的任何局部变量:

# app/views/users/_form.html.erb
<%= render :partial => "profiles/form", :locals => {:user => @user, :profile => @profile} %>
#app/views/users/_form.html.erb
“profiles/form”,:locals=>{:user=>@user,:profile=>@profile}%>
但是,请注意,传递给partial的变量只能作为局部变量访问,而不能作为实例变量访问:

# app/views/profiles/_form.html.erb
<%= form_for [user, profile] do |f| %>
  ...
<% end %>
#app/views/profiles/_form.html.erb
...

这表示您有一个用于配置文件的嵌套资源路由,但该路由没有显示在您的路由中。你发布了routes.rb的全部内容了吗?你找到解决方法了吗?根据我的经验,每次我遇到stringify keys错误时,它都与我传递给一个构造不正确的方法的哈希有关。@andrewliu,如果你是从一个分部渲染分部,你可能应该考虑重构你的代码。我应该把代码放在哪个动作中:
user=user.find(params[:user\u id])
?没关系。大概,您正在执行
新建
更新
操作,但在这两种情况下,您都可以通过
参数[:user\u id]
访问
用户id
。我在索引操作中获得未定义的方法“配置文件”。我在它里面有这个
@user=user.find(params[:user\u id])
@profiles=@user.profiles
因为
用户
有一个
配置文件
,所以在进行查找时应该使用“profiles”的单数,即
@user.Profile
。我已经修改了上面的答案来展示一个例子。啊,好的!但是该死!我现在遇到了这个错误:
未定义NilClass:Class的方法'model_name'
及其引用的是我的视图页面中的表单,知道这是怎么回事吗?谢谢你的帮助!