我正在开发一个rails应用程序,我正在尝试访问此变量,并且我一直收到未定义的方法错误等。
在我的控制器中,我正在做:
@application = Application.find(params[:id])
@curr_app_id = @application.application_field.last(1)
puts @curr_app_id
并打印出来
#<ApplicationField:0x56678b8>
这是什么类型的变量,我如何访问它的ID?
答案 0 :(得分:2)
我在IRB控制台做了一些调查......
1.9.3p0 :018 > puts User.last(1).class # => Array
1.9.3p0 :019 > puts User.last.class # => User
1.9.3p0 :018 > puts User.last(1) # => #<User:0x00000006f36280>
1.9.3p0 :019 > puts User.last # => #<User:0x00000006f36280>
相同的输出,不同的类!
给last
方法提供一个整数(即使你给1)会得到一个数组:Class Array (Ruby 1.9.3) here。
1.9.3p0 :028 > puts User.last(1).id
# => NoMethodError: undefined method `id' for #<Array:0x00000006f2d8d8>
你应该使用last参数:
@application = Application.find(params[:id])
@curr_app_id = @application.application_field.last
# then you should be able to use the object's methods:
puts @curr_app_id.id
答案 1 :(得分:1)
@application.application_field.last
正在返回ApplicationField
个对象。将整数传递给#last
将返回数组中的对象数。
因此,@application.application_field.last(2)
将返回与数组中@application
关联的最后两个application_field对象。
@application.application_field.last
应该为您提供ApplicationField
个对象。在#id
上调用@application.application_field.last.id
,应该返回id,假设它是ActiveRecord模型(或respond_to?(:id)
其他方式)。