在Admin::Programs中出现错误#new



我最近安装了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的主键。将它与您的第一个模型关联起来应该不会有任何问题。

最新更新