在我的视图页面中,我使用form_tag创建一个表单,该表单将一个id字符串从隐藏字段传递给控制器代码。
在我的控制器代码中,我循环遍历一组id以更新Expression表中包含该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 :(得分:0)
尝试将ID的数组(和sub_id)转换为整数。
对象的发现是失败还是更新?在更新调用之后输出@expression.errors
以查看是否有任何验证失败。
所有实例变量都有原因吗?如果变量不超出该方法,则不需要@。 @expression项似乎是多余的,你只是复制@existing_exp对象,你不需要将返回放入一个新对象,特别是如果每次循环运行它都被替换。
答案 1 :(得分: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])
希望它可能对其他人有用