2012-06-23 83 views
0

我Rails的新手,遇到了一些麻煩傳遞參數形成。傳遞參數,形成的link_to爲的has_many:通過關聯

我有一個課程模式和課程模式。課程和教訓與have_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 %> 

上面的代碼沒有提交課程ID。在日誌中我看到:

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

有可能這裏發生了一些問題。

+0

感謝傑里米。 TextLesson是錯字 - 它是固定的。我會檢查出嵌套模式railscast,看看我能走這條路 – oob205

0

您使用@course_id變量的看法,但我沒有看到它的設置?當你檢查頁面時,那裏有價值嗎?此外,嵌套屬性的提示是一個偉大的。你會希望經常使用這種模式,以便現在學習它很有價值。 (和快速的錯字/修正「have_many」顯然是has_many。你越確定你永遠不會正確輸入,越不可能偷偷進入你的代碼)。

+0

我試圖設置從課程顯示頁COURSE_ID用<%=的link_to「添加新課程」,new_course_listing_path(COURSE_ID:@ course.id) %>。但我現在已經知道link_to只接受html選項,所以我將要嵌套屬性路由。 – oob205