ActiveRecord #find得到错误的对象类

ede*_*ill 1 ruby activerecord ruby-on-rails

我有两个模型:CreditCard和BlacklistItem :: CreditCard.如果我首先搜索BlacklistItem :: CreditCard,我会得到预期的行为:

>> BlacklistItem::CreditCard.find(:all).first
=> #<BlacklistItem::CreditCard id: 5, *snip* >
>> 
Run Code Online (Sandbox Code Playgroud)

如果我首先搜索一个CreditCard,当我去找BlacklistItem :: CreditCard项目后,我会得到意想不到的行为:

>> CreditCard.find(:all).first
=> #<CreditCard id: 2, key_id: 4, *snip* >
>> BlacklistItem::CreditCard.find(:all).first
(irb):2: warning: toplevel constant CreditCard referenced by BlacklistItem::CreditCard
=> #<CreditCard id: 2, key_id: 4, *snip* >
>> 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?只是不可能在他们之间拥有这种关系的名字吗?我将重命名BlacklistItem :: CreditCard作为解决方法,但它确实是这个特定对象的最佳名称.

Ian*_*les 7

Rails中的命名空间模型已经有很长一段时间了.有关于此事的书面记录好这里.您可以尝试通过以下方式明确指定要用于模型中列入黑名单的信用卡的表名:

class BlacklistItem::CreditCard
  set_table_name :blacklist_item_credit_card

  ...

end
Run Code Online (Sandbox Code Playgroud)

然而,即使有了这个,拥有顶级CreditCard模型和命名空间的BlacklistItem :: CreditCard,由于Rails的自动行为,你仍然可能遇到问题.