Rails不尊重has_one的模型关联

时间:2013-11-28 20:45:20

标签: ruby-on-rails ruby mongoid associations relationship

User.rb

has_one :subscription, :inverse_of => :user

Subscription.rb

has_one :credit_card, :inverse_of => :subscription

CreditCard.rb

belongs_to :user, :inverse_of => :credit_card
belongs_to :subscription, :inverse_of => :credit_card

信用卡控制器

def new
   @credit_card = current_user.build_credit_card
end

def create
   @credit_card = current_user.build_credit_card
end

if @credit_card.save
    if @credit_card.save
    format.html { redirect_to @credit_card, notice: 'Credit card was successfully created.' }
    format.json { render action: 'show', status: :created, location: @credit_card }
  else
    format.html { render action: 'new' }
    format.json { render json: @credit_card.errors, status: :unprocessable_entity }
  end
end

但是,我仍然可以为我的用户模型添加多张信用卡。这怎么可能?如果我是正确的,只有has_many会发出这样的行为吗?一个has_one关联应该阻止创建其他实体,除此之外,据我所知..

我尝试了所有变化,但仍然没有运气。

非常感谢任何帮助!

谢谢。

1 个答案:

答案 0 :(得分:2)

我从未使用过has_one关系,但google和堆栈溢出的强大功能帮助我理解了这一点。

Difference between has_one and belongs_to in Rails?

belongs_to表示外键位于此类的表中。所以belongs_to只能进入持有外键的类。

has_one

表示另一个表中有一个引用此类的外键。所以has_one只能进入另一个表中的列引用的类。

也是在这篇文章中记住它的好方法:

  

我总是从玩具总动员的角度来考虑它。安迪'has_one'伍迪,   伍迪'属于'安迪。外键在哪里?在伍迪的唯一。

这对于理解关系也很有用。

http://requiremind.com/differences-between-has-one-and-belongs-to-in-ruby-on-rails/