2011-11-16 69 views
1

在我的查看页面中,我使用form_tag创建一个表单,该表单将隐藏字段中的ID字符串传递给控制器​​代码。使用form_tag更新数据库中的记录

在我的控制器代码中,我通过一个ID数组循环来更新包含表达式表中的该ID的每条记录。但下面的代码似乎不起作用。 我真的很感激,如果有人可以给我一些关于下面的代码有什么问题的建议。

def update_expression 
    @emi_ids_array = params[:emi_ids].split(/,/) 
    @sub_id = params[:sub_id] 

    @emi_ids_array.each do |emi_id| 
    @existing_exp = Expression.find(:first, :conditions => [ "EXT_EMI_ID = ? and EXT_SUB_FK = ?", emi_id, @sub_id]) 
    @expression = @existing_exp.update_attributes(
     :EXT_SUB_FK => @sub_id, 
     :EXT_PRESENCE => "present", 
     :EXT_STRENGTH => "weak", 
     :EXT_EMI_ID => emi_id 
    ) 
    end 
end 
+0

只是检查,但被正确地传递给函数的PARAMS - 也许提出params.inspect来检查。这是Rails 2或3吗? (如果3可能将Expression.find语句更改为Expression.where)。 Expression.find是否返回任何结果?在控制台中用一些已知的参数尝试它并检查返回的@existing_exp? – Pasted

+0

是的,find方法返回正确的值 – tanya

+1

也许尝试小写的列名 - 不知道ruby和rails如何与大写的列名称行为,因为它们不会被视为常量?认为你可以解决这个问题,使自己的getter和setter方法(很老的http://snippets.dzone.com/posts/show/2034)或Rails 3的变体(http://stackoverflow.com/questions/ 4605543/rails-3-easy-work-with-pascal-case-column-names) – Pasted

回答

0

找到了一个临时解决方案。 “update_attributes方法”似乎并没有工作,所以我选择了“update_all”属性

Expression.update_all({:EXT_PRESENCE => "present", :EXT_STRENGTH => "weak"},['EXT_EMI_ID = ? and EXT_SUB_FK = ?', emi_id, @sub_id]) 

希望,它可能是别人有用

0

尝试将ID(和sub_id)数组转换为整数。

是否发现失败的对象或更新?在更新调用后输出@expression.errors,查看是否有任何验证失败。

是否有所有实例变量的原因?如果变量不超出该方法,则不需要@。同样,@表达式项目看起来多余,你只需要复制@existing_exp对象,你不需要把返回值放入一个新的对象中,特别是当每次循环运行时它都被替换。

+0

这些ID格式为EMI:222,所以我不能将它们转换为整数。 – tanya

+0

它能够找到对象。只有更新失败 – tanya

相关问题