我最近安装了ActiveAdmin。
我已经成功地添加了一个Model
作为活动管理资源,随后转到localhost:3000/Admin并创建了几个测试对象。
当我添加第二个Model
(belongs_to
是第一个)时,我得到以下错误,当我浏览仪表板并尝试创建后一种模型的新对象时:
NoMethodError in Admin::Programs#new
Showing /Users/df/.rvm/gems/ruby-2.1.1/bundler/gems/active_admin- 7a2a31067e99/app/views/active_admin/resource/new.html.arb where line #1 raised:
undefined method `sss_center_id' for #<Program id: nil, name: nil, created_at: nil, updated_at: nil>
Extracted source (around line #1):
1
insert_tag renderer_for(:new)
注意:SssCenter是has_many
程序(抛出错误的第二个模型)的父模型的模型名
当我运行rake routes
时,我看到我有以下路径:
new_admin_program GET /admin/programs/new(.:format) admin/programs#new
,它是用动作admin/programs#new
调用的路径。我的问题是:你在哪里定义与ActiveAdmin命名空间的控制器方法?我试着去app/admin/
,但我不认为你在那里做。
如果Program
属于SSS Center
,那么您在程序模型中缺少的是SSS Center的外键列
要创建该列,可以从创建一个新的迁移
开始rails g migration AddSssCenterToProgram
并在db/migrate/<name_of_migration>.rb
class AddSssCenterToProgram < ActiveRecord::Migration
def change
add_column :programs, :sss_center_id, :integer
end
end
run rake db:migrate
现在,您应该为program
拥有一个名为sss_center_id
的属性,该属性将存储特定SSS Center的主键。将它与您的第一个模型关联起来应该不会有任何问题。