我最近安装了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)
N.B。 SssCenter是父模型的模型名称,has_many
程序(抛出错误的第二个模型)
当我运行rake routes
时,我发现我有以下路径:
new_admin_program GET /admin/programs/new(.:format) admin/programs#new
这是使用操作admin/programs#new
调用的路径。我的问题是:您在哪里定义使用ActiveAdmin命名空间的控制器方法?我试着去app/admin/
,但我不认为你在那里做过。
答案 0 :(得分:1)
如果Program
属于SSS Center
,那么您在程序模型中缺少的是SSS中心的外键列
要创建该列,您可以先创建一个新的迁移
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
运行rake db:migrate
现在,您应该拥有名为program
的{{1}}属性,该属性将存储特定SSS中心的主键。你不应该再将它与你的第一个模型联系起来了。