The second attr is a transient only used when the user signs up for an 
account, so I did not want to save it it in the database.

I now have in the model:

attr_accessor :completed_cfdym
def completed_cfdym
  @completed_cfdym
end
def completed_cfdym=(var)
  if var = 'true'
    @completed_cfdym = 'true'
  else
    if var = 'false'
      @completed_cfdym = 'false'
    else
      @completed_cfdym = ''
    end
  end
end
validates(:completed_cfdym, inclusion: { in: [true, false], message: 
"%{value} is not a valid response"} )

The '' is because I do want force the user to answer.

And the view:

      <%= f.label :completed_cfdym, "Have you already completed 'A 
Conversation for the Difference You Make in Life?", class: 'span5'  %>
      <%= f.select :completed_cfdym, {'' => nil, 'Yes' => true, 'No' => 
false}, {}, { :class => 'span1' } %>

This still fails with:
Completed cfdym is not a valid response

It also does not preserve the value that I set when it displays the error 
and goes back to the '' => 'nil' setting

On Sunday, June 8, 2014 6:39:34 AM UTC-7, James Kwame wrote:
>
> What exactly are you trying to achieve with this approach, why do you need 
> to have the second attr not in the database and validated? 
>
> To answer your question, yes you can force it to be a boolean, by creating 
> your own accessor methods
>
> Instead of attr_accessor :attrvalue
>   def attrvalue
>     @value
>   end
>
>   def attrvalue=(new_value)
>       if new_value == "true"
>          @value = true
>       else
>          @value = false
>       end
>   end
>
> On Saturday, June 7, 2014 9:17:08 PM UTC-4, Asa Romberger wrote:
>>
>> I have a model with a boolean variable in the database and one added by 
>> attr_accessor:
>>
>> In the model:
>>
>>   attr_accessor :attrvalue
>>
>>   validates(:dbvalue, inclusion: { in: [true, false], message: "%{value} 
>> is not a valid response"} )
>>
>>   validates(:attrvalue, inclusion: { in: [true, false], message: 
>> "%{value} is not a valid response"} )
>>
>> In the view:
>>
>>     <%= form_for(@user) do |f| %>
>>
>>       <%= f.select :dbvalue, {'' => nil, 'Yes' => true, 'No' => false}, 
>> {},  { :class => 'span1' } %>
>>
>>       <%= f.select :attrvalue, {'' => nil, 'Yes' => true, 'No' => false}, 
>> {},  { :class => 'span1' } %>
>>
>>     <% end %>
>>
>> The dbvalue works, the attrvalue does not work and always throws the 
>> message attrvalue is not a valid response.
>>
>> I assume that attrvalue is not a boolean. Can I force it to be a boolean? 
>> Alternately, is there another way to handle it?
>>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/680683aa-b649-494d-b1de-3baac073c09c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to