0

我是 Rails 新手,在将参数传递给表单时遇到了一些麻烦。

我有一个课程模型和课程模型。Courses 和 Lessons 与 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

这里可能存在一些问题。

于 2012-06-23T01:42:58.737 回答
0

您在视图中使用了@course_id 变量,但我看不到它的设置位置?当您检查页面时,那里有值吗?此外,嵌套属性提示是一个很棒的提示。您需要经常使用该模式以使现在学习它变得有价值。(并且快速错字/修复“have_many”显然是 has_many。你越是确保你从未正确输入它,它就越不可能潜入你的代码)。

于 2012-06-23T16:09:36.303 回答