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.