質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2378閲覧

attr_accessor を取得する方法

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/10/18 09:02

attr_accessor の値を取得して form_for の中に f.text_field で羅列したいです
column は取得できるのですが attr_accessor で追加したメンバー変数はどうやって取得すればいいですか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

attr_accessor(name)は単純にメソッドを定義するのと変わらないので
特に列挙するための方法が用意されていたりはしません。

自分用のattr_accessorを用意するのがベストでしょう。

rb

1module AttrList 2 def self.included klass 3 klass.extend ClassMethods 4 end 5 module ClassMethods 6 def attr_accessor *names 7 @attr_accessor ||= [] 8 @attr_accessor |= names.map(&:to_sym) 9 super 10 end 11 def attr_reader *names 12 @attr_reader ||= [] 13 @attr_reader |= names.map(&:to_sym) 14 super 15 end 16 def attr_writer *names 17 @attr_writer ||= [] 18 @attr_writer |= names.map(&:to_sym) 19 super 20 end 21 22 # assignableが非推奨だったりしてめんどくさいしいらんかも 23 def attr name, assignable = false 24 if assignable 25 attr_accessor name 26 else 27 attr_reader name 28 end 29 end 30 31 def accessor_list 32 @attr_accessor || [] 33 end 34 def reader_list 35 @attr_reader || [] 36 end 37 def writer_list 38 @attr_writer || [] 39 end 40 end 41end 42 43class Hoge 44 include AttrList 45 attr_accessor :x, :y 46 attr_accessor "z" 47end 48 49p Hoge.accessor_list

他の方法としてinstance_methods(false)を利用してメソッドを列挙し
その中からアクセッサっぽいのを列挙する方法も考えられます

rb

1class Hoge 2 attr_accessor :x, :y 3 attr_accessor "z" 4end 5 6methods = Hoge.instance_methods(false).map(&:to_s) 7p methods.select{|name1| 8 name1.end_with?("=") && methods.any?{|name2| name1.start_with?(name2)} 9}.map(&:chop)

投稿2018/10/19 00:07

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/19 02:46

>特に列挙するための方法が用意されていたりはしません。 そうなのですね… つまり attr_accessor にわたすときにクラス変数にも定義しておいてそれを取り出すしかないということなんですね ``` @@attr = :param1, :param2, ... attr_accessor @@attr ``` みたいに… ありがとうございました
asm

2018/10/19 02:50

クラス変数は継承関連で使いづらいのでクラスのインスタンス変数のが便利です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問