2011-06-09 76 views
0

我正在开发一个带有Ruby 1.8.7和Rails 2.3.5的webapp,它将管理一些工业过程。其中一个要求是,当有人想要删除注册表时,删除任务将不得不更新数据库表的某个字段。该栏位确定记录是否有效。更新而不是删除

我已修改的默认删除由支架生成的方法:

def activar 
    @alarma = Alarma.find(params[:id]) 

    respond_to do |format| 
    if @alarma.update_attribute(:estado_id => 1) 
     flash[:notice] = 'La alarma ha sido activada.' 
     format.html { redirect_to(@alarma) } 
     format.xml { head :ok } 
    else 
    format.html { render :action => "index" } 
    format.xml { render :xml => @alarmas } 
    end 
    end 
end 

def desactivar 
    @alarma = Alarma.find(params[:id]) 

    respond_to do |format| 
    if @alarma.update_attribute(:estado_id => 2) 
     flash[:notice] = 'La alarma fue desactivada.' 
     format.html { redirect_to(@alarma) } 
     format.xml { head :ok } 
    else 
    format.html { render :action => "index" } 
    format.xml { render :xml => @alarmas } 
    end 
    end 
end 

其中:estado_id => 1是活动的,并且是:estado_id => 2去激活。但是,当我尝试执行更新时,它不会更改该属性。其实,它什么都不做。

有没有人有线索?

+2

请按照Rails惯例。调用你的字段'is_active'并简单地将它设置为true或false。 – meagar 2011-06-09 20:02:10

+4

@meager:“Rails约定”可能会将该字段称为“active”,并且是一个布尔值,不需要“is”前缀:) – 2011-06-09 21:03:56

回答

0

你应该在你的情况

update_attributes方法(属性)公共

更新所有从 传入的哈希属性使用update_attributes并保存记录。 如果对象无效,则保存 将失败并返回false。

例如:

,或者如果你想使用update_attribute

update_attribute(名称,值)公共

@alarma.update_attribute(:estado_id, 2)更新单个属性并保存 记录,而不通过 正常验证程序。