我有兩種模型:Schedule和Project。計劃belongs_To項目和項目has_one計劃。對進度和項目的路線嵌套這樣的:在導軌路線中,嵌套資源導致白屏
get 'projects/current', to: 'projects#show_current', as: :current_freelancer_projects
resources :projects do
resources :schedules
end
當我運行耙路線,它說的路徑作出新的時間表是:
new_project_schedule GET /projects/:project_id/schedules/new(.:format)
的問題是,當我包括鏈接到頁面上的new_project_Schedule,頁面在safari中變白。在Firefox中,網頁會加載,但是當我點擊表單的提交按鈕,我得到的錯誤:
First argument in form cannot contain nil or be empty
如果我註釋掉的鏈接的形式,我沒有得到的白色屏幕。這裏是鏈接:
<% @projects.each do |project| %>
<tr>
<td><%= project.title %></td>
<td><%= project.employer.email %></td>
<td>date</td>
<td>rating</td>
<td>bid</td>
<td>tags</td>
<td><%= link_to 'Create Schedule', new_project_schedule_path(project.id) %></td>
</tr>
<% end %>
我知道@projects被定義,因爲所有其他TD細胞工作。我怎樣才能解決這個問題?
一些更多的信息:
這裏是顯示所有項目,並有鏈接到每個頁面控制器創建計劃頁:
def show_current
@projects = current_user.projects
end
UPDATE:
這裏有一些的控制器:
時間表#創建:
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
時刻表#新:
def new #This controller is what the link above goes to
@schedule = Schedule.new
@project = Project.find(params[:project_id])
@schedule.tasks.build #tasks is a model that belongs_to schedule
end
項目#show_current:
def show_current #In this action view, @projects is looped through and for each project, a link to schedules#new is displayed,
@projects = current_user.projects
end
全新的日程視圖:
<%= form_for [@project, @schedule] do |f| %>
<%= f.fields_for :tasks do |builder| %>
<%= render 'task_fields', :f => builder %>
<% end %>
<p><%= link_to_add_fields "Add task", f, :tasks %>
<p><%= f.submit "Submit" %></p>
<% end %>
UPDATE:
如果我改變的link_to本:
<%= link_to 'Create Schedule', new_project_schedule_path(project.id, Schedule.where(project_id: project.id))
我不再獲得白色屏幕,但輸入的網址搞砸:
http://localhost:3000/projects/24/schedules/new.%23%3CActiveRecord::Relation::ActiveRecord_Relation_Schedule:0x007fa1d6422a78%3E
我知道URL不可能是正確的那麼東西告訴我,我還沒有真正解決了這一問題。
UPDATE:
當我更改爲項目#show_current查看頁面什麼,該頁面將再次暫時無法工作。但是,如果我刷新幾次或轉到另一頁,然後返回,它會再次變成白色。如果我改變了頁面上的內容,它會暫時再次運行,然後再次變成白色。所以我看到它的方式,問題必須是項目#show_current控制器或與路線。我將一些路由代碼添加到上面的路由中,因爲現在看起來它可能是相關的。這就是說,我試圖改變路線代碼,但沒有任何工作。
__Wow__。我希望我可以多次投下這個答案。 – zeantsoi