Richlewis
Richlewis

Reputation: 15374

Creating a record with Associations - Active Admin

I am using active admin and seem to be struggling with creating a record with an association. I have set this up in the normal way

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

end

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

end

I then want to create a New member along with their membership type in the same form, so my member.rb looks like this so far

ActiveAdmin.register Member do
# Set Which Columns are to be displayed on the index page
index do
column :forename
column :middlename
column :surname
column :house_no
column :house_name
column :street
column :town
column :postcode
column :home_tel
column :mobile_tel
column :work_tel
column :email

column :membership do |member|
  member.membership.map{ |ms| ms.membership_type}
end

default_actions
end
# Set Which Columns are to be displayed on Create New Member
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]} 

end 
  f.actions
end

end

This displays a select box where i can choose from various Membership types, but i dont seem to be passing the correct value when creating the record,

This is an example of what is being posted

member[forename]:Name 1
member[middlename]:Name 2
member[surname]:Name 3
member[house_no]:1
member[house_name]:
member[street]:Test Street
member[town]:Test Town
member[postcode]:CF23 7BD
member[home_tel]:01633222222
member[mobile_tel]:07864582356
member[work_tel]:01633555555
member[email]:[email protected]
membership_attributes"=>{"membership_type"=>"Student"}
commit:Create Member 

This doesn't seem right does it? Also when i try and view the record

column :memberships do |member|
  member.memberships.map{ |ms| ms.membership_type}
end

I get the following mysql error

Mysql2::Error: Unknown column 'memberships.member_id' in 'where clause': SELECT `memberships`.* FROM `memberships`  WHERE `memberships`.`member_id` = 10

Could anyone point me in the right direction please or can anyone see where im going wrong?

Much appreciated

Upvotes: 0

Views: 1157

Answers (2)

user2996577
user2996577

Reputation: 61

Regarding the MySQL error, i think for the association to work you need to add the column member_id to the memberships table. You can create the migration with

rails g migration add_member_id_to_memberships member_id:integer

Then migrate with

bundle exec rake db:migrate

Upvotes: 0

rorofromfrance
rorofromfrance

Reputation: 1904

Instead of f.input :memberships try this:

f.has_many :memberships do |pf|
    pf.input :membership_type
end

and close your member object fields like this

f.inputs "Member Registration" do
    f.input :forename
    f.input :middlename
    f.input :surname
    ...
end

So your form should look like this:

form do |f|
  f.inputs "Member Registration" do
    f.input :forename
    f.input :middlename
    f.input :surname
    # .. the rest of your fields
  end
  f.has_many :memberships do |pf|
    pf.input :membership_type
  end
  f.actions
end

Upvotes: 2

Related Questions