无法使用关联Active Admin创建记录

时间:2013-12-05 15:22:13

标签: ruby-on-rails associations activeadmin formtastic

我不知道为什么这个操作系统让我如此头疼,但它是..我想要一个表单来创建一个会附加了相关member_type的成员

到目前为止我的设置

class Member < ActiveRecord::Base
 has_one :membership
 accepts_nested_attributes_for :membership
 attr_accessible :membership_id, :forename, :middlename, :surname, :house_no, :house_name, :street, :town, :postcode, :home_tel, :mobile_tel, :work_tel, :email
end

class Membership < ActiveRecord::Base
belongs_to :member
attr_accessible :membership_type
end

成员模型将membership_id作为外键。

然后是我的admin / member.rb表单,这是问题开始的地方。我似乎无法使用相关的membership_id创建成员记录。

form do |f|
f.inputs "Member Registration" do
  f.input :forename
  f.input :middlename
  f.input :surname
  f.input :house_no
  f.input :house_name
  f.input :street
  f.input :town
  f.input :postcode
  f.input :home_tel
  f.input :mobile_tel
  f.input :work_tel
  f.input :email
end
   f.inputs :for => [:membership, f.object.membership || Membership.new] do |m|
   m.input :membership_type, :label => 'Membership Type', :as => :select, :collection => Membership.all.map{|m| [m.membership_type, m.id]} 
  end 
f.actions
end

目前发生的一切是成员资格模型根据选择的选项添加了另一条记录,因此如果选择了Peack成员资格,则会重复。

但现在看看它是有意义的,因为我要求它创建一个新的会员记录。那么我如何让它来创建一个会员ID的会员记录

现在迷路了

1 个答案:

答案 0 :(得分:2)

您的关联不合适,根据我的理解,您需要创建新成员或需要通过选择MemberShip类型来更新现有成员。

因此,在这种情况下,您需要在members表中拥有membership_id。

class Member < ActiveRecord::Base
 belongs_to :membership
 attr_accessible membership_id, :forename, :middlename, :surname, :house_no, :house_name, :street, :town, :postcode, :home_tel, :mobile_tel, :work_tel, :email
end

class Membership < ActiveRecord::Base
  has_many :members
  attr_accessible :membership_type
end

form do |f|
  f.inputs "Member Registration" do
    f.input :forename
    f.input :middlename
    f.input :surname
    f.input :house_no
    f.input :house_name
    f.input :street
    f.input :town
    f.input :postcode
    f.input :home_tel
    f.input :mobile_tel
    f.input :work_tel
    f.input :email
  end
  f.input :membership_id, :label => 'Membership Type', :as => :select, :collection => Membership.all.map{|m| [m.membership_type, m.id]} 
  f.actions
end