I have two models: Schedule and Project. Schedule belongs_To Project and Project has_one schedule. The routes for schedule and Project are nested like this:
get 'projects/current', to: 'projects#show_current', as: :current_freelancer_projects
resources :projects do
resources :schedules
end
When I run rake routes, it says the path to make a new schedule is:
new_project_schedule GET /projects/:project_id/schedules/new(.:format)
The problem is, when I include a link to new_project_Schedule on a page, the page goes white in safari. In Firefox, the page will load, but when I click the submit button of the form, I get the error:
First argument in form cannot contain nil or be empty
If I comment out the link to the form, I don't get the white screen. Here is the link:
<% @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 %>
I know @projects is defined because all of the other td cells are working. How can I fix this?
SOME MORE INFO:
Here is the controller for the page that displays all the projects and has the links to each create schedule page:
def show_current
@projects = current_user.projects
end
UPDATE:
Here are some of the controllers:
Schedules#create:
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
Schedules#new:
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
Projects#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
New Schedule view:
<%= 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:
If I change the link_to to this:
<%= link_to 'Create Schedule', new_project_schedule_path(project.id, Schedule.where(project_id: project.id))
I no longer get the white screen but the url is messed up:
http://localhost:3000/projects/24/schedules/new.%23%3CActiveRecord::Relation::ActiveRecord_Relation_Schedule:0x007fa1d6422a78%3E
I know that url can't be right so something tells me i haven't actually fixed the problem.
UPDATE:
When I change anything for the view page for projects#show_current, the page will work again temporarily. However, if i refresh it a few times or go to another page and then go back, it turns white again. If i change something on the page, it will work again temporarily, and then eventually turns white again. So the way I see it, the problem has to either be with the projects#show_current controller or with the routes. I am adding some of the routes code to the routes above, since now it appears it might be relevant. That being said, I've tried changing the routes code but nothing works.