Rails中的多模型表单3

时间:2011-05-09 23:43:31

标签: ruby-on-rails-3 forms

当涉及到rails时,我仍然是一个n00b,但是,我确实有一个关于如何进行多模型表单的问题。

基本上,我有一个活动,用户需要能够注册活动并提供信用卡来收取活动费用。信用卡(我不会持有CC的实际数据,authorize.net会,但我需要保留代表卡的令牌)将与用户一起生活,以便他们将来可以注册其他活动。因此,我希望用户以后能够对此进行编辑,并且该卡不是特定于单个事件的。这似乎不像我使用嵌套路线,是吗?

我觉得这很简单,但我想我还不完全确定如何做到这一点。我可以使用嵌套模型(而不是路由)并仍然独立更新每个部分吗?

2 个答案:

答案 0 :(得分:3)

如果我理解你的问题,那么你可以。我认为你的意思是这样的:

class User < ActiveRecord::Base
  has_one :credit_card
end

如果这是正确的,那么第一步是将其添加到User类:

class User < ActiveRecord::Base
  has_one :credit_card
  accepts_nested_attributes_for :credit_card
end

此时您只需在路线文件中设置“用户”资源,就可以通过编辑视图中的fields_for方法编辑信用卡:

form_for @user do |f|
  f.fields_for :credit_card do |ff|
    ff.label :number
    ff.text_field :number
  end
  f.submit
end

这有帮助吗?

答案 1 :(得分:0)

由于评论中不允许格式化,我正在为此做出回答。

感谢@twmills的回答,

我也是铁杆新手。我有一个问题,如果我有以下关系,它会起作用吗?

class User < ActiveRecord::Base
  has_many :credit_cards, :dependent => :destroy
  accepts_nested_attributes_for :credit_card
end

class CreditCards < ActiveRecord::Base
  belongs_to :user
end

在上述情况下,除非您有父用户,否则无法创建CreditCard对象。 f.fields_for :credit_card do |ff|还会创建一个CraeditCard @user到f?

的对象

根据我的理解,这是不可能的,因为如何告诉视图,哪个信用卡可以编辑。

其次,在编辑时,这很好,但我可以在创建用户时做类似的事情。即在用户创建时获取他的信用卡信息。