0

私はレールアプリケーションに取り組んでおり、この変数にアクセスしようとしていますが、未定義のメソッドエラーなどが発生し続けています.

私のコントローラーでは、私はやっています:

@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)関連付けられた最後の 2 つの application_field オブジェクトが返されます。@application

@application.application_field.lastオブジェクトを提供する必要がありApplicationFieldます。を呼び出す#idと、それが ActiveRecord モデル (またはその他の方法)@application.application_field.last.idであると仮定して id を返す必要があります。respond_to?(:id)

于 2012-12-07T19:19:16.423 に答える