用户模型表现奇怪,在rails控制台中工作,在控制器中说未定义的方法

我这样做:

user = User.find( params[:id] ) 

当我做:

 user.section_id 

它说:

 nomethoderror exception undefined method 'section_id' for  

为什么会说<#Array?

在rails控制台中,当我这样做时,一切正常: u = User.find(2)

更新

我的javascript正在这样做:

 $.ajax({ type: "POST", url: "/user/add_section", dataType: "html", data: { id: id, section_text: sectionText }, success: function(payload) { }, error: function(jqx, ts, et) { }, complete: function(){} }); 

使用chrome我可以看到id是8。

我的控制器动作:

 def add_section user = User.find(params[:id]) section_id = user.section_id # error!! end 

我在这段代码中放了一个调试器,对象确实正确加载,它只是加载到一个数组中,所以这有效:

 user[0].section_id 

但是在irb中它可以正常工作:user.section_id用于传递给find方法的完全相同的值。

 user = User.find( params[:id] ) 

看起来params[:id]返回一个Array ,所以user–实际上是一个用户数组。 或者它可以只是一个id包裹到[]user = User.find [8] – 它仍然会返回一个带有一个元素的数组

所以你应该调试你的params[:id]

UPD

此外,您的应用程序中存在问题。 它不是REST。 你应该调用/user/:id/add_section路径而不是/user/add_section

你的路线:

 resources :users do post :add_section, :on => :member end 

用户。 find可以返回多种类型。 您没有为您的示例传递正确的参数。 您可以在服务器日志中看到发送到控制器的参数,或者只通过p params打印它