2014-02-25 60 views
1

我有以下嵌套資源:嵌套資源的強參數?

resources :sources do 
    resource :category_pages 
end 

當我在category_pages的形式,我有這樣的:

<%= form_for [params[:source_id], @category_page], url: source_category_pages_path do |form| %> 
<%= render partial: 'form', locals: { form: form } %> 
<% end %> 

我想知道怎樣才能確保該SOURCE_ID是在我的控制器中的參數。我曾嘗試過:

def create 
    @category_page = CategoryPage.new(category_page_params) 
end 

def category_page_params 
    params.require(:category_page).permit(:name, :url, :source_id) 
end 

但我不斷收到一個錯誤,指出'source_id'不能爲空。在這種情況下,我應該如何使用強參數?

我也試過這樣:

def category_page_params 
    params.require(:category_page, :source_id).permit(:name, :url) 
end 

因爲SOURCE_ID不是category_page PARAMS內,但顯然需要的只是接受一個參數。 PARAMS其實是這樣的:

{"utf8"=>"✓", "authenticity_token"=>"...=", "category_page"=>{"name"=>"", "url"=>""}, "commit"=>"Add Category Page", "action"=>"create", "controller"=>"category_pages", "source_id"=>"1"} 

回答

0

:source_id不是category_page_params的一部分,因爲它不與category_page通過。嘗試使用此功能:

def source_id_params 
    params.require(:source_id) 
end 
0

嘗試這樣

def safe_params 
    safe_attributes = [ 
    category_pages_attributes: 
    [ 
     :id, :name, :url, :_destroy 
    ] 
    ] 
    params.require(:source).permit(*safe_attributes) 
end