RailsAdmin::MainController#edit 中的 NoMethodError
NoMethodError in RailsAdmin::MainController#edit
我的 rails 管理员中有存款和钱包模型。我在存款模型中使用钱包作为:
wal=Wallet.where(user_id: self.user_id)
wal.balance = wal.balance + self.amount
wal.save!
错误:
NoMethodError in RailsAdmin::MainController#edit
的结果
puts wal.inspect
是
<ActiveRecord::Relation [#<Wallet id: 1, balance: 200, user_id: 22, created_at: "2019-03-20 04:57:45", updated_at: "2019-03-20 06:43:32">]>
我找到了解决方案,但我认为这不是一个正确的方法
wal=Wallet.where(user_id: self.user_id)
wal[0].balance = wal[0].balance + self.amount
wal[0].save!
如有任何帮助,我们将不胜感激。提前致谢。
.where
总是 return 是关系而不是对象。关系基本上是一个对象数组。无论您的搜索 return 是一个、零个还是多个对象。
因此,执行此操作的简洁方法与您的方法类似。您只是 select 关系数组索引 0 位置的对象。
wal = Wallet.where(user_id: self.user_id).first
另一种方法是向用户模型添加关系。假设您确保用户始终只有一个钱包并且您有可用的用户。
# model
has_one :wallet
# controller
user = User.find(self.user_id)
wal = user.wallet
总是找到 returns 一个对象(如果它存在),因为只能有一个。
另一种方法可以是 .find_by
。它类似于查找,但适用于其他对象字段。为此,您必须确保每个用户只有一个钱包,因为 find_by
return 只是第一个对象,即使有多个对象匹配查询也是如此。
Wallet.find_by(user_id: self.user_id)
最后 2 个例子的优点是它们 return 一个 ActiveRecord::RecordNotFound
当没有匹配时。 .where
return 只是一个空关系数组。
我的 rails 管理员中有存款和钱包模型。我在存款模型中使用钱包作为:
wal=Wallet.where(user_id: self.user_id)
wal.balance = wal.balance + self.amount
wal.save!
错误:
NoMethodError in RailsAdmin::MainController#edit
的结果
puts wal.inspect
是
<ActiveRecord::Relation [#<Wallet id: 1, balance: 200, user_id: 22, created_at: "2019-03-20 04:57:45", updated_at: "2019-03-20 06:43:32">]>
我找到了解决方案,但我认为这不是一个正确的方法
wal=Wallet.where(user_id: self.user_id)
wal[0].balance = wal[0].balance + self.amount
wal[0].save!
如有任何帮助,我们将不胜感激。提前致谢。
.where
总是 return 是关系而不是对象。关系基本上是一个对象数组。无论您的搜索 return 是一个、零个还是多个对象。
因此,执行此操作的简洁方法与您的方法类似。您只是 select 关系数组索引 0 位置的对象。
wal = Wallet.where(user_id: self.user_id).first
另一种方法是向用户模型添加关系。假设您确保用户始终只有一个钱包并且您有可用的用户。
# model
has_one :wallet
# controller
user = User.find(self.user_id)
wal = user.wallet
总是找到 returns 一个对象(如果它存在),因为只能有一个。
另一种方法可以是 .find_by
。它类似于查找,但适用于其他对象字段。为此,您必须确保每个用户只有一个钱包,因为 find_by
return 只是第一个对象,即使有多个对象匹配查询也是如此。
Wallet.find_by(user_id: self.user_id)
最后 2 个例子的优点是它们 return 一个 ActiveRecord::RecordNotFound
当没有匹配时。 .where
return 只是一个空关系数组。