help with logic in controller.


This is a method that I have written to show personal messages. If the
message that is requested is sent "to" the logged in user I will do
another check and set status to opened if necessary. I can't figure
out why the last "else" statement never executes if the first one is
false: Message.find(params[:id], :conditions => {:from )

def show
    if @message = Message.find(params[:id], :conditions => {:to => }) then
     if @message.status = "new"
        @message.status = "opened"
        @message = Message.find(params[:id], :conditions => {:from => })
    rescue ActiveRecord::RecordNotFound

Best regards.
Asbjørn Morell.

    if @message = Message.find(params[:id], :conditions => {:to => }) then

cause what you do here is assigning the searchresult to @message
if @message == Message.find(params[:id],...

i'm not sure right now, if this would work, this would depend on what's
in @message. the name implies a string/text, which you can't compare
with an active record object anyway

maybe what you want to do is something like:
if @message == Message.find(params[:id],...).field_name
to compare with the data stored in field_name

or @message contains a record, but then objects are not necessarily
identical, if they have the same content. maybe you would have to use
another way to compare them like the eql? function

atmorell wrote:

     if @message.status = "new"

      if @message.status == "new"

your version is always true!