【问题标题】:Rails Event EventType model association - undefined method `title' for nil:NilClassRails Event EventType 模型关联 - nil:NilClass 的未定义方法“标题”
【发布时间】:2017-11-16 10:57:48
【问题描述】:

我在从 Event-EventType 模型关联中列出 EventType 标题时遇到问题。

在这种情况下,我有一个简单的 Event 模型和 EventType 模型。 事件模型有字段 eventtype_id。

现在当我想显示 EventType Title 时,我收到错误 'undefined methodtitle' for nil:NilClass'`

我尝试使用 belongs_to 和 has_many 关联,但不起作用。可能我做错了什么。

【问题讨论】:

    标签: ruby-on-rails model associations belongs-to


    【解决方案1】:

    如果你的模型是EventType,那么你的外键应该是event_type_id

    要继续使用您的结构,您可以尝试使用参数 foreign_key: :eventtype_id 自定义 belongs_to,但这是一个 hack。

    另一方面,你应该得到关于你的关联的错误,我不清楚你为什么没有它。

    如果这对你不起作用,那么请在rails c(rails 控制台)中调用你的目标对象,显示它的属性并仔细检查你是否真的有EventType,ID 来自Event,调用EventType.find([yout_event_id])

    【讨论】:

    • 请写这是否有帮助?
    • 您好安东,感谢您的回复。我什至尝试使用外键我得到了一些结果,但是我得到了 eventtype.title 我得到了 event.title。但是,我找到了解决方案: td = EventType.find(item.eventtype_id).title 在这种情况下没有任何关联我得到 eventtype 标题。
    • 它仍然是一个 hack。这样做你将变成根本不使用关联。正如我所问的,您能否提供来自您的目标事件对象的数据?只需为其粘贴控制台输出
    • irb(main):001:0> EventType.find(1) EventType Load (0.2ms) SELECT "event_types".* FROM "event_types" WHERE "event_types"."id" = ?限制 ? [["id", 1], ["LIMIT", 1]] => #
    • irb(main):002:0> Event.all 事件负载 (0.4ms) SELECT "events".* FROM "events" LIMIT ? [["LIMIT", 11]] => #<:relation id: title: ba na place_id: icon: nil points: public: true user_id eventtype_id:>]>
    【解决方案2】:

    你应该试试

    belongs_to :event_type, foreign_key: :eventtype_id, class_name: "EventType"
    

    或者

    您可以通过编写迁移来重命名属性

    class EditField < ActiveRecord::Migration
      def up
        rename_column :table_name, :old_column, :new_column
      end
    
      def down
        rename_column :table_name, :new_column, :old_column
      end
    end
    

    然后运行 ​​rake db:migrate

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2017-06-06
      • 2015-06-30
      • 1970-01-01
      相关资源
      最近更新 更多