2012-06-23 2 views
0

Я новичок Rails и имею некоторые проблемы с передачей параметров для формирования.Передача параметров с помощью link_to для has_many: через ассоциацию

У меня есть модель курса и модель урока. Курсы и уроки связаны с has_many: через ассоциацию. Код ниже:

class Course < ActiveRecord::Base 
     attr_accessible :description, :name 

     has_many :course_listings 
     has_many :lessons, through: :course_listings 

    end 

    class Lesson < ActiveRecord::Base 
     attr_accessible :title, :body, :category_ids 

     has_many :course_listings 
     has_many :courses, through: :course_listings 

    end 

    class CourseListing < ActiveRecord::Base 
     attr_accessible :course_id, :lesson_id 

     belongs_to :course 
     belongs_to :lesson 
    end 

Я хочу, чтобы позволить пользователям добавлять уроки к существующему, то есть, создать новый курс листинга. Сейчас я на следующее приложение/просмотров/курсы/show.html.erb

<%= link_to 'Add New Lesson', new_course_listing_path(course_id: @course.id) %> 

В CourseListingsController, у меня есть:

def new 
     @course_listing = CourseListing.new 
     if params[:course_id] 
     @course_listing.course_id = params[:course_id] 
     end 
    end 

В форме для нового курса листинга, у меня есть:

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

     <%= f.hidden_field :course_id, value: @course_id %> 

    <%= f.label :lesson_id, "Enter Lesson" %> 
    <%= f.text_field :lesson_id %> 

    <%= f.submit "Save" %> 

    <% end %> 

Код, указанный выше, не отправляет идентификатор курса. В журнале я вижу:

Parameters: {..., "course_listing"=>{"course_id"=>"", "lesson_id"=>"7"}, 
    "commit"=>"Save Lesson"} 
    (0.1ms) begin transaction 
    (0.1ms) rollback transaction 

Как видно из сказанного выше, course_id не передается в CourseListingsController. Провел немало времени, изучая это, и любое руководство было бы очень оценено.

+0

Спасите свои дни головных болей с помощью simple_form - формы в рельсах сделаны легко - https://github.com/plataformatec/simple_form –

ответ

0

Здесь есть несколько проблем.

  • Вы ссылались: text_lessons выше, а также уроки. Это опечатка?
  • Наличие контроллера для CourseListings - не идеальный способ сделать это; вы должны создать вложенный учебный курс по курсовой модели. См. Этот railscast http://railscasts.com/episodes/196-nested-model-form-revised
+0

Спасибо Джереми. TextLesson был опечатан - он исправлен. Я проведу railscast для вложенной модели и посмотрю, могу ли я пойти по этому маршруту. – oob205

0

Вы используете переменную @course_id в представлении, но я не вижу, где она установлена? Когда вы просматриваете страницу, есть ли там значение? Кроме того, подсказка вложенных атрибутов является отличной. Вы захотите использовать этот шаблон достаточно часто, чтобы научить его теперь ценным. (и быстро опечатать/исправить «has_many», очевидно, has_many. Чем больше вы убедитесь, что вы никогда не вводите его правильно, тем меньше вероятность, что он проникнет в ваш код).

+0

Я пытался установить курс курса с страницы просмотра курса с помощью <% = link_to 'Добавить новый урок', new_course_listing_path (курс_ид: @ course.id) %>. Но теперь я узнал, что link_to принимает только варианты html, поэтому я буду использовать маршрут вложенных атрибутов. – oob205

Смежные вопросы