attr_accessor の値を取得して form_for の中に f.text_field で羅列したいです
column は取得できるのですが attr_accessor で追加したメンバー変数はどうやって取得すればいいですか
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア15147
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/19 02:46
2018/10/19 02:50