我有两个模型:Schedule和Project。计划belongs_To项目和项目has_one计划。有几个问题,但我认为它们都有相同的原因。以下是#create controller:
的时间表代码def create
@schedule = Schedule.new(schedule_params)
@schedule.project = Project.find(params[:project_id])
if @schedule.project.student_id == current_user.id
if @schedule.save && @schedule.freelancer_accepts
flash[:notice] = "Successfully created schedule."
redirect_to profile_path(current_user.profile_name)
else
render :action => 'new', :notice => 'Invalid Schedule'
end
else
render :action => 'new', :notice => 'Schedule is invalid.'
end
end
以下是问题:
即使它是has_one关系,我仍然可以为单个项目创建许多计划。这导致我将控制器更改为:
def create
if !Schedule.where(project_id: params[:project_id]).any?
@schedule = Schedule.new(schedule_params)
@schedule.project = Project.find(params[:project_id])
if @schedule.project.student_id == current_user.id
if @schedule.save && @schedule.freelancer_accepts
flash[:notice] = "Successfully created schedule."
redirect_to profile_path(current_user.profile_name)
else
render :action => 'new', :notice => 'Invalid Schedule'
end
else
render :action => 'new', :notice => 'Schedule is invalid.'
end
else
render :action => 'new', :notice => 'A schedule has already been created.'
end
end
改变是我基本上将控制器包裹在一个如果表示"如果存在时间表,则不要创建一个。在我更改代码后,我遇到了以下问题:
在firefox中,当我按下提交按钮创建新的时间表时,我收到此错误:
First argument in form cannot contain nil or be empty
在Safari中,当我按下提交按钮创建新计划时,页面变为白色。此外,每次我尝试返回显示表单的页面时,页面都会变白。这很奇怪。
我该如何解决这个问题?感谢。
更新:我的路线和表单视图可能会有所帮助:
路线:
resources :projects do
resources :schedules
end
表格的第一部分:
<%= form_for [@project, @schedule] do |f| %>
答案 0 :(得分:0)
原来这个以及我遇到的其他几个问题实际上并不是由has_one关系引起的。我的缓存存在某种类型的问题。我不确定它是什么,但通过禁用缓存,我能够解决问题。