Как обновить все остальные записи, если одна помечена как стандартная? - PullRequest
0 голосов
/ 13 октября 2010

Я пытаюсь изменить все поля default_standing на FALSE для всех остальных записей, когда кто-то помечает одно как ИСТИНА.Таким образом, у меня будет только одна запись по умолчанию в таблице.Вот что я делаю в создании и обновлении моего контроллера, но, похоже, он не работает:

def update
    @standing = Standing.find(params[:id])

    if @standing.default_standing
      @standings = Standing.where(["default_standing = ? AND id != ?", true, params[:id]])

      @standings.each do |s|
        s.default_standing = false
        s.save!
      end
    end

    respond_to do |format|
      if @standing.update_attributes(params[:standing])
        format.html { redirect_to(@standing, :notice => 'Standing was successfully updated.') }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @standing.errors, :status => :unprocessable_entity }
      end
    end
  end

Ответы [ 2 ]

1 голос
/ 13 октября 2010

Я думаю, что условие в update_all shingara неверно. Нужно обновить все, где id не стоит. Id:

class Standing

  def self.all_false_instead_of(standing)
    return if standing.default_standing
    Standing.update_all(["default_standing = ?", false], ['id <> ?', standing.id])
    standing.update_attributes!(:default_standing, true)
  end
end
1 голос
/ 13 октября 2010
class Standing

  def self.all_false_instead_of(standing)
    return if standing.default_standing
    Standing.update_all("default_standing = false", {:id => standing.id})
    standing.update_attributes!(:default_standing, true)
  end
end

Лучше в модели и что-то в этом роде.Вы провалили модульный тест?

В вашем контроллере

def update
    @standing = Standing.find(params[:id])
    Standing.all_false_instead_of(@standing)
end

В своем коде вы никогда не выдвигаете default_standing в true в вас @ стоя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...