2012-06-22 2 views
0

У меня есть приложение, в котором пользователи могут создавать курсы, и каждый курс имеет одну программу. Как я могу настраивать свои курсы и программы (я знаю, что это Syllabi, но, по-видимому, Rails не), контроллер и мои маршруты, поэтому на странице курса есть ссылка, чтобы создать или показать программу курса, а также ссылку на курс с страницы программы обучения?Контроллер и проблемы с маршрутами в моем приложении rails

В моих маршрутах у меня есть:

resources :courses do 
    resources :syllabuses 
    member do 
    put :enroll #this is so users can enroll in the course 
end 
end 

В настоящее время, так что course_id будет сохранен в таблице учебных программ в моем courses_controller, у меня есть:

def create_syllabus 
    @course = Course.find(params[:id]) 
    @syllabus = @course.build_syllabus(params[:syllabus]) 
    if @syllabus.save 
    redirect_to @syllabus, notice: "Successfully created syllabus." 
    else 
    render :new 
    end 
end 

то в моих курсах показать страницу I имеют:

<section> 
    <% if (current_user.courses.includes(@course) || 
    current_user.coursegroups.find_by_course_id_and_role(@course.id, "admin")) %> 
    <%= render 'create_syllabus' %> 
    <% end %> 
    </section> 

затем в моей форме create_syllabus (в моей папке с курсами) Я пробовал начиная с:

# I have @course = Course.find(params[:id]) defined in show in the 
                #courses_controller 
    <%= form_for @course.create_syllabus do |f| %> 
    <%= form_for @course.syllabus.create_syllabus do |f| %> 
    <%= form_for @course.syllabus.create do |f| %> 

и я получаю неопределенную ошибку метода для каждого из них.

ответ

0

Если вы хотите создать новый syllabus в вашем show действия конкретного course, вы можете добавить это к контроллерам и просмотров:

courses_controller.rb

@course = Course.find(params[:id]) 

# Build a new @syllabus object, only if there is none for the current course 
unless @course.syllabus 
    @syllabus = @course.build_syllabus 
end 

просмотров/курсы/show.html.erb

# Show the syllabus name if there is one, or show the form to create a new one 

<% if @course.syllabus.name %> 
    <p>Syllabus: <%= @course.syllabus.name %></p> 
<% else %> 
    <p>Create Syllabus:</p> 
    <%= form_for([@course, @syllabus]) do |f| %> 
    <div class="field"> 
     <%= f.label :name %><br /> 
     <%= f.text_field :name %> 
    </div> 
    <div class="actions"> 
     <%= f.submit %> 
    </div> 
    <% end %> 
<% end %> 

syllabuses_controller.rb

def create 
    @course = Course.find(params[:course_id]) 

    # Build new syllabus object based on form input 
    @syllabus = @course.build_syllabus(params[:syllabus]) 

    if @syllabus.save 
    # redirect to /course/:id 
    redirect_to @course, notice: 'Syllabus was successfully created.' } 
    end 
end 

course.rb

class Course < ActiveRecord::Base 
    attr_accessible :name 
    has_one :syllabus 
end 

syllabus.rb

class Syllabus < ActiveRecord::Base 
    belongs_to :course 
    attr_accessible :name, :course_id 
end 

Некоторые вещи, которые я оставил вне, но вы все равно должны включать в себя:

  • валидация формы
  • отрисовки если что-то пойдет не так
  • потянув вещи в партиалов
  • фиксирующих плохой код, как if @course.syllabus.name
  • вытащить if/else логики в качестве помощника
  • ...