rails has_one关系导致问题 - 也是白屏

时间:2013-11-22 17:38:18

标签: ruby-on-rails model-view-controller database-design ruby-on-rails-4 has-one

我有两个模型: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

以下是问题:

  1. 即使它是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
    
  2. 改变是我基本上将控制器包裹在一个如果表示"如果存在时间表,则不要创建一个。在我更改代码后,我遇到了以下问题:

    1. 在firefox中,当我按下提交按钮创建新的时间表时,我收到此错误:

      First argument in form cannot contain nil or be empty
      
    2. 在Safari中,当我按下提交按钮创建新计划时,页面变为白色。此外,每次我尝试返回显示表单的页面时,页面都会变白。这很奇怪。

    3. 我该如何解决这个问题?感谢。

      更新:我的路线和表单视图可能会有所帮助:

      路线:

      resources :projects do
        resources :schedules
      end
      

      表格的第一部分:

      <%= form_for [@project, @schedule] do |f| %>
      

1 个答案:

答案 0 :(得分:0)

原来这个以及我遇到的其他几个问题实际上并不是由has_one关系引起的。我的缓存存在某种类型的问题。我不确定它是什么,但通过禁用缓存,我能够解决问题。