0

我对我的 Rails 应用程序感到困惑。我创建了 3 个模型:user, event, category具有以下关联:

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

这个想法是Users创建events在单个category. 这些类别是预先填充的,因此用户无需制作它们,只需选择要归档的类别。

我的用户和事件关联已经工作了一段时间,但由于我添加了类别模型,当我尝试创建新事件时出现“无法批量分配受保护的属性:类别”错误。

我整天都在浏览页面,似乎无法追踪错误。我尝试belongs_to :category, :foreign_key => :nameEvent课堂上添加外键,但这似乎没有帮助。

非常感谢任何帮助、解决方案和/或正确方向的指示!

编辑 2:我是 Rails 的新手,但我想我已经从错误屏幕中找到了问题所在。说“ ActiveModel::MassAssignmentSecurity::Error in EventsController#create ”,再往下说“ app/controllers/events_controller.rb:58:in create ”,相当于这行代码:@event = current_user.events.new(params[:event]).

如果我没看错,那就意味着发生了错误,因为我正在尝试使用category在哈希中传递的参数创建一个新事件,但它不知道如何处理它。不幸的是,我也不知道该怎么办......

编辑 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
4

2 回答 2

0

放置:foreign_key => :nameclass User或提供attr_accessibleclass User

于 2013-08-17T05:40:25.070 回答
0

在 Event 模型中将 :category 添加到 attr_accessible。并且使用名称作为外键是一个坏主意,因为它不是唯一的

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

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

或者

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

此外,您可以使用方法 create

于 2013-08-17T05:41:58.650 回答