Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
184 views
in Technique[技术] by (71.8m points)

model view controller - In rails routes, nested resources is causing white screen

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This problem, along with several others I was having, turned out to have nothing to do with nesting the resources. Actually, the problem had to do with the cache. Disabling the cache fixed the problem.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...