我正在开发一个 Rails 应用程序,我正在尝试访问这个变量,但我不断收到未定义的方法错误等。
在我的控制器中,我正在做:
@application = Application.find(params[:id])
@curr_app_id = @application.application_field.last(1)
puts @curr_app_id
它打印出来
#<ApplicationField:0x56678b8>
这是什么类型的变量,我如何访问它的 ID?
我正在开发一个 Rails 应用程序,我正在尝试访问这个变量,但我不断收到未定义的方法错误等。
在我的控制器中,我正在做:
@application = Application.find(params[:id])
@curr_app_id = @application.application_field.last(1)
puts @curr_app_id
它打印出来
#<ApplicationField:0x56678b8>
这是什么类型的变量,我如何访问它的 ID?
我在我的 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)会产生一个 Array: 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
@application.application_field.last
正在返回一个ApplicationField
对象。将整数传递给#last
将返回数组中的对象数。
因此,将返回与数组@application.application_field.last(2)
关联的最后两个 application_field 对象。@application
@application.application_field.last
应该给你ApplicationField
对象。调用#id
它,@application.application_field.last.id
应该返回 id,假设它是一个 ActiveRecord 模型(或respond_to?(:id)
其他方式)。