У меня есть две модели: расписание и проект. Расписание принадлежит_То и проект имеет расписание. Маршруты по графику и проект вложены как это:В маршрутах рельсов вложенные ресурсы вызывают белый экран
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 на странице, страница бела в сафари. В 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:
Вот некоторые контроллеров:
Расписания: 0:
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))
Я больше не получаю белый экран, но URL перепутались:
http://localhost:3000/projects/24/schedules/new.%23%3CActiveRecord::Relation::ActiveRecord_Relation_Schedule:0x007fa1d6422a78%3E
Я знаю, что URL не может быть правильным, так что-то мне подсказывает, я на самом деле не устранило проблему.
UPDATE:
Когда я изменить что-либо на странице просмотра проектов # show_current, страница будет снова работать временно. Однако, если я обновляю его несколько раз или перехожу на другую страницу, а затем возвращаюсь назад, он снова становится белым. Если я что-то изменил на странице, он снова будет работать снова, а затем снова станет белым. Поэтому, как я вижу, проблема должна быть либо с проектами # show_current или с маршрутами. Я добавляю некоторые коды маршрутов к вышеперечисленным маршрутам, так как теперь кажется, что это может быть актуально.При этом я пытался изменить код маршрута, но ничего не работает.
__Wow__. Хотел бы я проголосовать за этот ответ не один раз. – zeantsoi