gpt4 book ai didi

ruby-on-rails-3 - Rails 3 Active Record 动态 find_or_create finder 方法是否存在一些未记录的不一致?

转载 作者:行者123 更新时间:2023-12-04 07:12:24 25 4
gpt4 key购买 nike

很抱歉标题太长,但这让我很困扰。我是 Rails 的新手,所以这是我的第一个项目。导轨 3.0.3。

在我的模型中,用户 可能会或可能不会阅读很多条目;这是在名为 ReadEntries 的模型中进行跟踪的。我认为这种多对一关系已在代码中正确定义。

用户.rb:

has_many :read_entries

条目.rb:

has_many :read_entries

读取条目.rb:

belongs_to :entry
belongs_to :user

必须在某个时候填充此表。如果我尝试这样做:

user.read_entries.find_or_create_by_entry_id(entry.id, :read => false)

我收到错误 Unknown key(s): read。不要尝试设置 :read,它会起作用。

但是,如果我用它创建同一行,它会起作用:

ReadEntry.find_or_create_by_entry_id_and_user_id(entry.id, user.id, :read => false)

从逻辑上讲,这些方法应该是相同的,对吧?谢谢。

最佳答案

我在 find_or_create 方面也有过奇怪的经历。如果它有效,我会很高兴,但它似乎不一致。

我目前遇到了与您相同的问题,我认为这可能是由于在关联上而不是直接在模型上调用 find_or_create。这是我的例子:

    permission_assignments.find_or_create_by_role_id(:role_id => role_id, :is_allowed => false)

这可以创建分配,除了“is_allowed”字段被设置为默认值“true”。这段代码对我有用(在权限模型中,因此是 self 引用)

    PermissionAssignment.find_or_create_by_permission_id_and_role_id(:permission_id => self.id, :role_id => role_id, :is_allowed => false)

不幸的是,它更冗长,但它确实有效。我仍然注意到的唯一问题是返回的对象没有分配 id(记录确实在数据库中创建,但是,如果我想更新更多属性,没有 id 就无法更新) .不知道这是否是一个单独的问题。

这里是 Rails 3.0.4 和 Postgres 8.4

关于ruby-on-rails-3 - Rails 3 Active Record 动态 find_or_create finder 方法是否存在一些未记录的不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4697677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com