0

私はRailsの初心者であり、フォームにパラメーターを渡すのに問題があります。

コースモデルとレッスンモデルがあります。コースとレッスンは、have_many:throughアソシエーションに接続されています。コードは以下のとおりです。

    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

ユーザーが既存のコースにレッスンを追加できるようにしたい、つまり、新しいコースリストを作成できるようにしたい。現在、app / views / courses/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 %>

上記のコードはコースIDを送信していません。ログには次のように表示されます。

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

上からわかるように、course_idはCourseListingsControllerに渡されていません。これを調査するのにかなりの時間を費やしました、そしてどんなガイダンスでも大いに感謝されるでしょう。

4

2 に答える 2

0

ここで起こっている問題がいくつかある可能性があります。

  • 上記の:text_lessonsとLessonsを参照しました。それはタイプミスですか?
  • CourseListingsのコントローラーを持つことは、それを行うための理想的な方法ではありません。コースモデルを介してネストされたレッスンを作成する必要があります。このrailscastをご覧ください http://railscasts.com/episodes/196-nested-model-form-revised
于 2012-06-23T01:42:58.737 に答える
0

ビューで@course_id変数を使用しますが、どこに設定されているのかわかりませんか?ページを調べるとき、そこに価値はありますか?また、ネストされた属性のヒントは素晴らしいものです。そのパターンを頻繁に使用して、学習する価値を高めることができます。(そして、簡単なタイプミス/修正「have_many」は明らかにhas_manyです。正しく入力しないようにすればするほど、コードに侵入する可能性は低くなります)。

于 2012-06-23T16:09:36.303 に答える