Ruby on rails 我需要外国ID还是其他活动记录关联?

Ruby on rails 我需要外国ID还是其他活动记录关联?,ruby-on-rails,activerecord,foreign-keys,Ruby On Rails,Activerecord,Foreign Keys,我被我的Rails应用程序难住了。我创建了3个模型:用户、事件、类别,它们具有以下关联: class User has_many :events, :dependent => :destroy attr_accessible :name, :email, :password, :password_confirmation, :remember_me class Category attr_accessible :name has_many :events class E

我被我的Rails应用程序难住了。我创建了3个模型:
用户、事件、类别
,它们具有以下关联:

class User
  has_many :events, :dependent => :destroy
  attr_accessible :name, :email, :password, :password_confirmation, :remember_me

class Category
  attr_accessible :name
  has_many :events

class Event
  attr_accessible :address, :cost, :date, :details, :end_time, :fav, :start_time, :title, :venue
  belongs_to :user
  belongs_to :category, :foreign_key => :name #not sure if this foreign key is working
其思想是
用户
创建
事件
,这些事件被归档在单个
类别下
。这些类别是预先填充的,因此用户不必创建它们,只需选择要归档的类别

我的用户和事件关联已经工作了一段时间,但是自从我添加了类别模型之后,我在尝试创建新事件时遇到了一个错误“无法批量分配受保护的属性:类别”

我整天都在浏览网页,似乎无法追踪错误。我尝试在
事件
类中使用
属于:category,:foreign\u key=>:name
添加外键,但似乎没有帮助

非常感谢您的帮助、解决方案和/或正确方向的指点

编辑2:我对Rails很陌生,但我想我已经从错误屏幕中找到了问题所在。表示“ActiveModel::MassAssignmentSecurity::EventsController#create”中的错误,然后进一步表示“app/controllers/events_controller.rb:58:in create”,这相当于这行代码:
@event=current_user.events.new(params[:event])

如果我读的是正确的,那就意味着发生了错误,因为我试图创建一个新事件,在散列中传递一个
category
param,而它不知道如何处理它。不幸的是,我也不知道该怎么办

编辑3:根据请求,以下是事件控制器的创建操作:

def create
@event = current_user.events.new(params[:event])

respond_to do |format|
    if @event.save
      format.html { redirect_to @event, notice: 'Event was successfully created.' }
      format.json { render json: @event, status: :created, location: @event }
    else
      format.html { render action: "new" }
      format.json { render json: @event.errors, status: :unprocessable_entity }
    end
  end
end

:外键=>:name
放在
类用户
中,或向
类用户
提供可访问的属性,将:类别添加到事件模型中可访问的属性。 使用名称作为外键是个坏主意,因为它不是唯一的

对于创建与用户和类别相关的事件,您可以执行以下操作:

user.events.build do |event|
    event.category = category
end


另外,您可以使用方法create

您可能应该看看这个类似的问题:在执行操作时,您是否能够准确地判断出“无法批量分配受保护的属性:类别”错误。我正在尝试通过“localhost:3000/events/new”添加一个事件这是我在添加类别之前能够创建事件的表单。由于我添加了类别f.collection\u select(正确显示),我在单击submit按钮后出现错误。我将以HTMLI不打算在用户和类别之间建立关系的形式进行编辑;这不是建立一个吗?我已经更新了attr_accessible
类用户
已经拥有的属性,请在控制器的创建操作中尝试@event=current_user.events.create(params[:event])我在添加时得到以下错误:category:
category(#70276053732040)expected,got String(#70276029549620)
然后它在事件控制器中引用我的“create”操作。您应该创建类似于
category.events.build
category.events.create的事件
category.events.build do |event|
    event.user =user
end