我这样做:
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方法的完全相同的值。
答案 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