简体   繁体   中英

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.

Try nesting syllabus in your routing,

  resources :courses do 
     resource :syllabus
  @school = Course.find(params[:school_id])

Looks suspicios to me.

Should it be

  @school = School.find(params[:school_id])

Or even more easily

  @school = @course.school

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM