举止怪异的用户模型,工作在轨控制台,称控制器未定义的方法

问题描述:

我这样做:举止怪异的用户模型,工作在轨控制台,称控制器未定义的方法

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

当我这样做:

user.section_id 

它说:

nomethoderror exception undefined method 'section_id' for <#Array:0x.....> 

为什么说<#阵列?

在轨控制台,一切工作正常,当我做: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它工作正常:用户。 section_id传递给find方法的完全相同的值。

+1

是什么params中[:ID]? – retro 2011-04-24 16:11:44

+0

我发布一个整数id = 8例如。 – Blankman 2011-04-24 16:20:43

+0

错误是'sectionid'和方法'section_id'? – 2011-04-24 16:23:00

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

貌似params[:id]返回阵列打印出来,所以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 
+0

感谢您提供的其他建议,那么我的route.rb看起来会如何呢?现在它是:post'add_section' – Blankman 2011-04-24 20:59:04

+0

我已经更新了我的答案。但是,你的神奇'params [:id]'呢?你是否修复了它只是调试? – fl00r 2011-04-24 21:16:39

+0

好吧,现在我正在从网址获取ID,因此不再传递它。仍然不知道为什么它成为一个阵列! – Blankman 2011-04-25 01:08:38

用户。 find可以返回多种类型。你的榜样没有通过正确的论点。你可以看到参数发送服务器日志控制器或只是通过p params

+0

标题表单数据显示此:ID%5B%5D:8 – Blankman 2011-04-24 16:27:38

+1

我不知道你在哪里。但它意味着id []:8。所以可能你正在传递一个元素的数组 - 8.当你传递数组来查找方法时,它也返回数组。 – retro 2011-04-24 16:29:52

+0

你打电话给这个页面?什么网址?你如何建立你的链接到这个页面?通过一些link_to?你在那里通过哪些论据? – retro 2011-04-24 16:37:54