【问题标题】:NoMethodError in Admin::Programs#newAdmin::Programs#new 中的 NoMethodError
【发布时间】:2014-08-02 04:32:18
【问题描述】:

我最近安装了 ActiveAdmin。

我已成功添加了一个Model 作为活动管理资源,随后转到 localhost:3000/admin 并创建了几个测试对象。

当我添加第二个Model belongs_to 第一个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/,但我不认为你在那里做。

【问题讨论】:

    标签: ruby-on-rails-4 activeadmin


    【解决方案1】:

    如果 Program 属于 SSS Center,那么您的程序模型中缺少的是 SSS 中心的外键列

    要创建该列,您可以从创建新迁移开始

    rails g migration AddSssCenterToProgram
    

    并在您的 db/migrate/&lt;name_of_migration&gt;.rb 中编辑此代码

    class AddSssCenterToProgram < ActiveRecord::Migration
      def change
        add_column :programs, :sss_center_id, :integer
      end
    end
    

    运行rake db:migrate

    现在您应该有一个名为 sss_center_idprogram 属性,特定 SSS 中心的主键将存储到该属性中。将它与您的第一个模型关联起来应该不会再有问题了。

    【讨论】:

    • 谢谢。当您创建 has_manybelongs_to 语句时,我的印象是 Rails 魔术发生的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多