Since the params will give you either "0" or "1" as a string, and
since you are trying to equate "0" (string) to "false" (boolean), why
not set a variable equal to "true" or "false" based on the params?
Try:
if params[:item][:status] == "0"
bool = false
else
bool = true
end
No, you really shouldn't be doing that in the controller. You almost
certainly want to do this in a before_save (or possibly
before_validation) callback on the MODEL.
Several reasons:
- it's a best practice to keep business logic in the model ("fat
model / skinny controller")
- inside the model callbacks, you've got access to both typecast data
(the incoming status will already have the right type) and the
_changed? predicate. For instance, your code could be shortened to:
class Item < ActiveRecord::Base
before_save :update_position
def update_position
self.position = nil if status_changed?
end
end
Not only does it avoid the messy conversion, it (IMHO) is far more
readable.