Responses interwoven below.
Quoting Tom Ha [email protected]:
end
[…]
Breaking your question into pieces.
case @user.low
when true
@low = false
when false
@low = true
end
This is exactly equivalent to your code above. If all you care about is
the
falseness (nil or false) or trueness (anything else), it can be
simplified to:
@low = !@user.low
…is supposed to be “generated” by something like this… (which is NOT
yet correct syntax)
==========================
if @user.{params[:id]} == true
@{params[:id]} = false
elsif @user.{params[:id]} == false
@{params[:id]} = true
end
This is harder to handle, your syntax is not valid Ruby, so I have to
make
some assumptions what you mean. Again breaking into pieces:
@user.{params[:id]} isn’t valid Ruby.
If @user is a hash, i.e., it was set with something like:
@user = {1 => 2, 3 => 4}
Then @user[params[:id]] is the proper syntax.
The same is true if @user is derived from ActiveRecord. You will get
the
attributes of @user, not the instance variables. Attributes are stored
in the
database, instance variables usually aren’t (except of course for the
values
in the @attributes hash).
If both @user and the current object instance are ActiveRecords, and
both are
only true or false and all values of params[:id] are attribute names:
self[params[:id]] = !@user[params[:id]]
If all values of params[:id] are methods, i.e. explicit via “def abc()
… end” or implicit (i.e. accessors, e.g. attr_accessor ‘abc’) then the
previous example becomes:
self.send(params[:id] + ‘=’, !@user.send(params[:id]])
For most any combination of types, the following is correct:
case @user.send(params[:id])
when true
self.send(params[:id] + ‘=’, false)
when false
self.send(params[:id] + ‘=’, true)
end
If “@{params[:id]}” is instance variables without accessors, i.e.
private,
someone else will have to answer your question.
HTH,
Jeffrey