私は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に渡されていません。これを調査するのにかなりの時間を費やしました、そしてどんなガイダンスでも大いに感謝されるでしょう。