首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails ActiveRecord update_attributes!不起作用

问Rails ActiveRecord update_attributes!不起作用
EN

Stack Overflow用户
提问于 2011-01-11 21:02:39
回答 2查看 2.1K关注 0票数 1

我使用的env如下所示:

代码语言:javascript
复制
Mysql: 5.1.51-community MySQL Community Server
Rails: 2.3.5
Ruby: 1.8.7

我有一条记录是item,然后我使用下面的代码来更新属性,

代码语言:javascript
复制
item.update_attributes!(
  :a => a,
  :b => b,
  :c => c
)

对于所有这些更新的属性,只有一个字段的值被更改,其他属性值保持不变,但我不知道哪些属性被更改,所以我更新了所有属性。

在调试过程中,我发现字段a的值被更改了,这与记录项的a值不同,但更新没有任何影响。

有人能帮我吗?谢谢。

添加:

刚才我追踪了一下rails代码,发现这个问题与rails代码有关:

代码语言:javascript
复制
    def update(attribute_names = @attributes.keys)
      quoted_attributes = attributes_with_quotes(false, false, attribute_names)
      return 0 if quoted_attributes.empty?
      connection.update(
        "UPDATE #{self.class.quoted_table_name} " +
        "SET #{quoted_comma_pair_list(connection, quoted_attributes)} " +
        "WHERE #{connection.quote_column_name(self.class.primary_key)} =     #{quote_value(id)}",
      "#{self.class.name} Update"
     )
   end

如果我将db中的字段a值更改为空,那么attribute_names是一个包含字段a的数组,但是db中的字段a值不是空的,attribute_names是一个空数组,但@attributes始终是一个包含a、b和c的映射。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-11 23:33:20

我找到了原因,因为更改字段值的方法有错误,更改后,它的原始值和新值是相同的,所以AR不做更新操作,因为没有任何字段被更改。

票数 0
EN

Stack Overflow用户

发布于 2011-01-11 21:13:30

很抱歉,问题中没有足够的信息来继续,所以这只是猜测:

你有没有可能在这个模型上使用attr_accessible或attr_protected?

使用attr_accessible,它不包括b和c,或者attr_protected,它包括b和c,可以解释你所看到的行为。

如果是这种情况,你将不得不创建多个update_attribute!电话。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4657895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档