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

时间:2011-04-24 16:10:13

标签: ruby-on-rails

我这样做:

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

当我这样做时:

user.section_id

它说:

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

为什么说&lt; #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方法的完全相同的值。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

打印