【问题标题】:Creating a record with Associations - Active Admin使用关联创建记录 - 活动管理员
【发布时间】:2013-12-04 11:31:51
【问题描述】:

我正在使用活动管理员,并且似乎很难通过关联创建记录。我已经以正常方式设置了这个

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

然后我想以相同的形式创建一个新成员及其成员类型,所以我的 member.rb 到目前为止看起来像这样

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

这会显示一个选择框,我可以在其中从各种会员类型中进行选择,但在创建记录时我似乎没有传递正确的值,

这是发布内容的示例

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]:test@mail.com
membership_attributes"=>{"membership_type"=>"Student"}
commit:Create Member 

这似乎不对吧?还有当我尝试查看记录时

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

我收到以下 mysql 错误

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

谁能指出我正确的方向,或者谁能看到我哪里出错了?

非常感谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 associations activeadmin


    【解决方案1】:

    试试这个,而不是f.input :memberships

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

    并像这样关闭您的成员对象字段

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

    所以你的表单应该是这样的:

    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
    

    【讨论】:

    • 恐怕这似乎不起作用,我现在有一个按钮可以链接到标有“会员注册”的任何内容,我认为我的关系可能不正确,应该是 has_one 吗?
    • 您介意复制或制作整个 /admin/member.rb 以及您的 Member 和 MembershipType 模型的屏幕截图吗? (如果你愿意,可以收件箱给我)
    • 我已经更新了我的问题,但是我已经将关系更改为成员 has_one 关系,我认为这是正确的逻辑
    【解决方案2】:

    关于 MySQL 错误,我认为要使关联起作用,您需要将列 member_id 添加到成员资格表中。您可以使用

    创建迁移
    rails g migration add_member_id_to_memberships member_id:integer
    

    然后用

    迁移
    bundle exec rake db:migrate
    

    【讨论】:

      猜你喜欢
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      相关资源
      最近更新 更多