嵌套资源的强参数?

时间:2014-02-25 05:15:06

标签: ruby-on-rails

我有以下嵌套资源:

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在我的控制器中的params中。我尝试过:

 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看起来真的像这样:

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

2 个答案:

答案 0 :(得分:0)

:source_id不属于category_page_params,因为它未与category_page一起传递。尝试使用此功能:

def source_id_params
  params.require(:source_id)
end

答案 1 :(得分:0)

试试这个

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