我正在尝试在rails中使用嵌套资源来创建新记录。我试图使用/events/id/entries/new
,其中有
<%= form_for([@event, @entry]) do |f| %>
在新页面上。
我的模特是:
class Entry < ApplicationRecord
belongs_to :user
belongs_to :event
class User < ApplicationRecord
has_many :entries, dependent: :destroy
class Event < ApplicationRecord
has_many :entries, dependent: :destroy
控制器是:
def new
@event = Event.find(params[:event_id])
@entry = @event.entries.build
end
def create
@user = current_user
@entry = Entry.new(user_id: @user.id, event_id: :event_id , course: :entry.course , siCard: :entry.siCard)
if @entry.save
redirect_to @user
flash.now[:info] = "Event Created"
else
render '/create'
flash.now[:danger] = "Somthing went wrong"
end
end
但是记录没有保存NoMethodError in EntriesController#create
,尽管它说传递的参数是。
"utf8"=>"✓",
"entry"=>{"course"=>"Orange", "siCard"=>"23232323"},
"commit"=>"Enter",
"event_id"=>"2"}
如何修改创建控制器以保存记录?
答案 0 :(得分:0)
放手一搏:
@entry = Entry.new(
user_id: current_user.id,
event_id: params[:event_id],
course: params[:entry][:course],
siCard: params[:entry][:siCard]
)
您不需要@user = current_user
,只需使用current_user.id
。
event_id: :event_id
只是将event_id
设置为符号。我猜你想要访问params值。所以:
event_id: params[:event_id]
这里:
course: :entry.course
您尝试在course
符号上调用:entry
方法。什么?!?
相反:
course: params[:entry][:course]
与siCard
相同。
siCard
不是Ruby-ish。相反,你应该si_card
。