I have a database column given as: t.column :change_address, :boolean The user interacts with this using a checkbox, but wants confirmations to read: Change address: Yes In an isolated case something like: @obj.change_address ? ''Yes'' : ''No'' Would work fine but this is peppered throughout scads of forms and boolean fields. The first step I took at DRYing this up was: class TrueClass def to_s "Yes" end end class FalseClass def to_s "No" end end But this breaks other uses. For example observe_field constructs the observers based on the to_s conversion of boolean attributes. Any ideas on how to DRY this usage up? Thanks -- View this message in context: http://www.nabble.com/DRY--Converting-Boolean-to-Yes-No-tf1957326.html#a5368812 Sent from the RubyOnRails Users forum at Nabble.com.
You could try something like: def change_address? self.change_address ? "Yes" : "No" end in the model. Steve Ross wrote:> I have a database column given as: > > t.column :change_address, :boolean > > The user interacts with this using a checkbox, but wants confirmations > to > read: > > Change address: Yes > > In an isolated case something like: > > @obj.change_address ? ''Yes'' : ''No'' > > Would work fine but this is peppered throughout scads of forms and > boolean > fields. The first step I took at DRYing this up was: > > class TrueClass > def to_s > "Yes" > end > end > > class FalseClass > def to_s > "No" > end > end > > But this breaks other uses. For example observe_field constructs the > observers based on the to_s conversion of boolean attributes. > > Any ideas on how to DRY this usage up? > > Thanks > -- > View this message in context: > http://www.nabble.com/DRY--Converting-Boolean-to-Yes-No-tf1957326.html#a5368812 > Sent from the RubyOnRails Users forum at Nabble.com.-- Posted via http://www.ruby-forum.com/.
I created a ''prettifier'' plugin that extended TrueClass and FalseClass with a ''prettier'' method that gave me a Yes/No response. More useful if you need the Yes/No to be available across the board. Yehuda''s response should be sufficient if you just need it for one column. -- Posted via http://www.ruby-forum.com/.
Yes, this handles the individual case in questions, but I have dozens of models and many of them have one or more boolean attributes. The larger question, then, is how to generalize the pattern? Thanks wycats wrote:> > You could try something like: > def change_address? > self.change_address ? "Yes" : "No" > end >-- View this message in context: http://www.nabble.com/DRY--Converting-Boolean-to-Yes-No-tf1957326.html#a5369236 Sent from the RubyOnRails Users forum at Nabble.com.
Where is the plugin or could you post relevant code? Philip Schalm wrote:> > I created a ''prettifier'' plugin that extended TrueClass and FalseClass > with a ''prettier'' method that gave me a Yes/No response.-- View this message in context: http://www.nabble.com/DRY--Converting-Boolean-to-Yes-No-tf1957326.html#a5369356 Sent from the RubyOnRails Users forum at Nabble.com.
./script/generate plugin pretty_boolean And then modify/create the following two files: # <RAILS_APP>/vendor/plugins/pretty_boolean/init.rb # Include hook code here require ''pretty_boolean'' # End init.rb # <RAILS_APP>/vendor/plugins/pretty_boolean/lib/pretty_boolean.rb # PrettyBoolean module PrettyBoolean def prettier self ? "yes" : "no" end end class FalseClass include PrettyBoolean end class TrueClass include PrettyBoolean end # End PrettyBoolean and, as long as the plugin is working, you can take any boolean you want and go some_boolean.prettier and it''ll return "yes" or "no" -- Posted via http://www.ruby-forum.com/.
Steve Ross wrote:> Where is the plugin or could you post relevant code? > > > Philip Schalm wrote: >> >> I created a ''prettifier'' plugin that extended TrueClass and FalseClass >> with a ''prettier'' method that gave me a Yes/No response. > -- > View this message in context: > http://www.nabble.com/DRY--Converting-Boolean-to-Yes-No-tf1957326.html#a5369356 > Sent from the RubyOnRails Users forum at Nabble.com.I think that we''re posting in between eachother here... I just posted the relevant code :D -- Posted via http://www.ruby-forum.com/.