用户模型表现奇怪,在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
打印它