我被我的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 => :name
下。这些类别已预先填充,因此用户无法制作这些类别,只选择要提交的类别。
我的用户和事件关联已经工作了一段时间,但是因为我添加了类别模型,所以当我尝试时,我得到“无法大量分配受保护的属性:类别”错误创建一个新事件。
我一整天都在浏览网页,似乎无法跟踪错误。我尝试在Event
课程中使用@event = current_user.events.new(params[:event])
添加外键,但似乎没有帮助。
慷慨地感谢正确方向的任何帮助,解决方案和/或指示!
编辑2:我是Rails的新手,但我想我已经从错误屏幕上找到了问题所在。说“ ActiveModel :: MassAssignmentSecurity :: EventsController中的错误#create ”并进一步说“ app / controllers / events_controller.rb:58:in create ”,这相当于此代码行:category
。
如果我正确读取它,那就意味着发生错误,因为我正在尝试使用散列中传递的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
参数创建一个新事件,并且它不知道如何处理它。不幸的是,我不知道该做什么......
编辑3:根据要求,这是事件控制器的创建操作:
{{1}}
答案 0 :(得分:0)
将:foreign_key => :name
放入class User
或将attr_accessible
提供给class User
答案 1 :(得分:0)
在事件模型中添加:类别到attr_accessible。 使用名称作为外键是一个坏主意,因为它不是唯一的
对于与用户和类别有关系的创建活动,您可以这样做:
user.events.build do |event|
event.category = category
end
或
category.events.build do |event|
event.user =user
end
此外,您可以使用方法创建