あなたのクラス メソッドto_csv
は関係 (スコープ) で機能するので、@coasters = Coaster.scoped
代わりに@coasters = Coaster.all
次のように記述します。
format.csv do
@coasters = Coaster.scoped
render text: @coasters.to_csv
end
説明:
あなたのメソッドto_csv
はで宣言されてself.
いるので、これはクラスメソッドです。このメソッドは、 object またはオブジェクトの配列ではなく、 Coaster
classでのみ実行できます。
Coaster.to_csv #good
Coaster.find(1).to_csv #error - Coaster object: undefined method 'to_csv'
Coaster.where('id>5').to_csv #good
Coaster.where('id>5').all.to_csv #error - return array of objects
Coaster.all.to_csv #error
最後の 3 行は Rails 3 に関連していますActiveRecord::Relation
: link1、link2。すべてのクラス メソッドはActiveRecord::Relation
オブジェクトに対して実行できますがCoaster.all
、リレーションではなくオブジェクトの配列を返すことに注意してください。
Coaster.scoped
すべてのオブジェクトの ActiveRecord::Relation を返します: http://apidock.com/rails/ActiveRecord/Scoping/Named/ClassMethods/scoped