2013-12-18 78 views
2

當您擁有一個rails資源時,rails似乎會自動爲該資源創建一個params條目。例如如果我的模型課程具有主題屬性,並且發佈主題=數學,它會自動創建參數[課程] = {主題:'你好'}。我遇到的問題是獲取嵌套的屬性出現在這個創建的課程數組中。Rails Param人口

我使用mongoid作爲我的後端,並且在課程上有一個關聯活動。代碼如下所示:

class Lesson 
    include Mongoid::Document 

    field :subject, type: String 

    embeds_many :activities, class_name: 'LessonActivity' do 
    def ordered 
     @target.sort { |x, y| x.display_order <=> y.display_order } 
    end 

    def reorder! 
     @target.each_with_index { |val, index| val.display_order = index } 
    end 
    end 

    accepts_nested_attributes_for :activities 

但是我不能工作了我如何訪問此活動從內部params.require(:lesson).permit :activities 我可以通過params.permit(:activities)訪問它,但是,感覺有點亂

+0

這取決於您的form_for代碼塊在您的視圖中的樣子。你能分享一下,我可以幫忙嗎? – Gjaldon

+0

它實際上是通過JSON POST請求完成的。發佈的數據如下所示:{「date」:「2013-09-04」,「date_position」:1,「subject」:「Maths」,「teaching_group」:「6LP」,「activities」:[{「title 「:」 啓動」, 「display_order」:0, 「內容」:空, 「時間」:空},{ 「標題」: 「主」, 「display_order」:1, 「內容」:空, 「時間」:空},{ 「標題」: 「全會」, 「display_order」:2, 「內容」:空, 「時間」:空}], 「模塊」: 「」, 「姓名」: 「」, 「目標」: null}(請注意,爲簡潔起見,我簡化了粘貼的類) –

+0

這是否有幫助-http://stackoverflow.com/questions/18527708/strong-params-nested-attributes-and-mongoid-dont-seem-to-work -at at-at-att? –

回答

0

立足存在params你爲了您的JSON POST請求,則需要將下面的代碼添加到白名單,你需要的PARAMS:

def activities_params 
    params.require(:activities).permit(:title, :display_order, :content, :time) 
end 

你的JSON POST請求轉發的PARAMS沒有了:活動哈希作爲VALU然後將課程鍵添加到白名單中,以便像上面那樣簡單。

+0

是的,我可以通過這種方式訪問​​活動參數並將其合併到課程參數中(請參閱我的問題的底部)。我的問題是我如何使它成爲課程的一部分或者爲什麼我不能。我沒有傳遞課程參數,因此Rails參數映射中有一些內容決定了我的模型的屬性並將其應用於參數。謝謝。 –

+0

爲了能夠幫助您,您需要在視圖中發佈表單的代碼。參數根據表單中每個輸入字段的name屬性填充。 – Gjaldon

+0

沒有表格,我想我現在可能會有答案,但會發布。 –

0

我想你可能已經回答了你的問題在這裏:

「我怎麼可以把它的經驗教訓部分關鍵爲什麼我不能,我不能傳遞一個教訓參數。」

如果我閱讀正確,你沒有通過課程參數,只是一個活動的散列?

這可以解釋爲什麼你可以訪問
params.permit(:活動) 但不 params.require(:課).permit:活動

+0

我可以在沒有它的情況下從課堂散列表中獲得其他內容,我現在知道爲什麼現在會發布它。感謝您的回答。 –

1

我已經做了一些挖掘和發現了什麼事情與此。

這一切都來自導軌功能,參數包裝,detailsapi。爲json配置的會自動將模型的屬性傳遞給模型名稱的參數(本例中爲Lesson)。

將根據模型如何響應方法attribute_names來填充模型的屬性,以便實現兩個路徑來實現問題的目標。

1 - 指示我的控制器將活動作爲課程參數的一部分包含在內。使用這種方法:

class Api::LessonsController < Api::ApiController 
    wrap_parameters Lesson, include: Lesson.attribute_names << :activities 

2 - 更新模型中的attiribute_names方法包括:活動

我還是留下了幾件事情要解決,即原因協會是不是一部分Mongoid上的attribute_names以及是否覆蓋它以包含屬性名稱是一個壞主意。