【问题标题】:ActiveModel::UnknownAttributeError: unknown attribute 'creator_id' for EventActiveModel::UnknownAttributeError:事件的未知属性“creator_id”
【发布时间】:2017-06-26 03:30:30
【问题描述】:
class User < ApplicationRecord
  has_many :created_events, :foreign_key => "creator_id", :class_name => "Event"
end

class Event < ApplicationRecord
  belongs_to :creator, :class_name => "User"
end

当我尝试使用创建者创建事件时,它显示 ActiveModel::UnknownAttributeError: unknown attribute 'creator_id' for Event. 我运行rails db:migrate,但它仍然没有创建外键并添加到事件表中。我究竟做错了什么?我到处看了看。

$ rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20170625163737  Create users
   up     20170625170905  Create events
   up     20170625171959  Add description to event
   up     20170625174531  Add creator id to events

但是,迁移文件显示没有添加:

class AddCreatorIdToEvents < ActiveRecord::Migration[5.1]
  def change
  end
end

【问题讨论】:

  • rails db:migrate:status 返回什么?
  • 您能否使用迁移文件更新问题以创建事件表。您可以在your_app/db/migrate 下找到它。
  • @SebastiánPalma 添加了。
  • @Kranti 添加。它基本上什么都不做。

标签: ruby-on-rails


【解决方案1】:

您没有正确定义关联。您的模型应如下所示:

class User < ApplicationRecord
  has_many :events, :foreign_key => "creator_id", :class_name => "Event"
end

class Event < ApplicationRecord
  belongs_to :creator, :foreign_key => "creator_id", :class_name => "User"
end

还有foreign_key 总是出现在子表中。尝试创建如下事件。

考虑到用户已经登录。

current_user.events.create(event_params)

请参考this 获取关联相关帮助。

【讨论】:

  • &gt;&gt; u.events.create(description: "trying to create") NoMethodError: undefined method 'events' for #&lt;User:0x000000051313c0&gt; from (irb):2 foreign_key 也总是出现在子表中。尝试像下面这样创建事件。你确定这是对的吗?
  • 我已经在我的回答中更新了关联。现在它将起作用。我已将用户模型中的 has_many :created_events 更改为 has_many :events。
  • 现在显示ActiveModel::UnknownAttributeError: unknown attribute 'user_id' for Event. from (irb):2
  • 我已经更新了我的答案。如果是自定义外键,我们需要在关联中定义外键。因为默认情况下,rails 在子表中查找关联 ID。在这种情况下,它正在事件表中查找 user_id。
【解决方案2】:

您的模型应如下所示:

class User < ApplicationRecord
  has_many :created_events, :foreign_key => "creator_id", :class_name =>    "Event"
end

class Event < ApplicationRecord
  belongs_to :creator, :foreign_key => "creator_id", :class_name => "User"
end

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多