Search code examples
ruby-on-railsruby-on-rails-3.1

Trouble managing model ownership in rails app


In my rails app Users and Schools can create courses, and each course has one syllabus.

in my course model:

belongs_to :hostable, polymorphic: true
has_one  :syllabus

syllabus:

belongs_to :course

school (and user):

has_many :courses, as: :hostable, :dependent => :destroy

My routes are currently set up as follows:

resources :users do
  resources :courses 
  member do
   get :attending, :memberships
  end
end

resources :schools do 
  resources :courses 
  member do
    put :apply, :enroll
  end
end

resources :syllabuses

In my syllabuses controller I have:

def create
  @course = Course.find(params[:id])
  @syllabus = @course.build_syllabus(params[:syllabus])
  if @syllabus.save
    redirect_to @course, notice: 'Syllabus was successfully created.' 
  end
end

my courses controller has this:

def show
  @course = Course.find(params[:id])
  @school = Course.find(params[:school_id])
  @title = @course.title
  unless @course.syllabus
    @syllabus = @course.build_syllabus
  end
end

and my course view page has

<%= form_for (@syllabus) do |f| %>

  <div> <%= f.label :syllabus %> </div>
  <%= f.label :name %> 
  <%= f.text_field :name %> </br>
    ....

  <%= f.submit "Save Changes" %>
<% end %>

but when I try to create a syllabus from a course page inside of a school I get:

"Couldn't find Course without an ID"

What am I doing wrong? How could I reconfigure my routes/models so that both Users and Schools can create a course, and then from within the course a syllabus can be created? I tried nesting the syllabus model under the course model with javascript but I had a few problems.


Solution

  • Try nesting syllabus in your routing,

      resources :courses do 
         resource :syllabus