Rails这个变量是什么(一个对象,一个哈希,一个数组等),我该如何访问它?

时间:2012-12-07 19:08:27

标签: ruby-on-rails ruby ruby-on-rails-3

我正在开发一个rails应用程序,我正在尝试访问此变量,并且我一直收到未定义的方法错误等。

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

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

并打印出来

#<ApplicationField:0x56678b8>

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

2 个答案:

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