Admin :: Programs#new中的NoMethodError

时间:2014-08-01 20:03:21

标签: ruby-on-rails-4 activeadmin

我最近安装了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/,但我不认为你在那里做过。

1 个答案:

答案 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中心的主键。你不应该再将它与你的第一个模型联系起来了。