0

我正在开发一个 Rails 应用程序,我正在尝试访问这个变量,但我不断收到未定义的方法错误等。

在我的控制器中,我正在做:

@application = Application.find(params[:id])
@curr_app_id = @application.application_field.last(1)
puts @curr_app_id

它打印出来

#<ApplicationField:0x56678b8>

这是什么类型的变量,我如何访问它的 ID?

4

2 回答 2

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)会产生一个 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
于 2012-12-07T19:21:41.283 回答
1

@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)其他方式)。

于 2012-12-07T19:19:16.423 回答