2016-12-19 34 views
0

我試圖在安裝程序上使用我的Rails 5應用程序的標記。Rails 5 - 作爲Taggable使用 - 針對特定標記列表的未經許可的參數

我有一個叫做Randd :: Field.rb的模型,它有一個名爲title的屬性。我想將這些標題用作提案模型的標籤。

我Proposal.rb有:

類提案< ApplicationRecord 包括政治家::適配器:: ActiveRecordQueries

acts_as_taggable 
    acts_as_taggable_on :randd_maturities, :randd_fields, :randd_purposes, :randd_activities 

我的建議form.html.erb有:

<%= f.collection_select :randd_field_list, Randd::Field.order(:title), :id, :title, {}, {multiple: true} %> 

我的提案控制器將randd_field_list列入白名單:

def proposal_params 
     params.require(:proposal).permit(:title, :randd_maturities_list, :randd_field_list, :randd_purposes_list, :randd_activities_list) 

當我保存所有這些信息並嘗試向提案添加標籤時,出現錯誤。服務器日誌顯示:

Unpermitted parameter: randd_field_list 

這沒有任何意義,因爲它是出現在屬性不在允許PARAMS列入白名單的一個問題 - 這是我做的事。

任何人都可以看到需要做什麼才能通過提案表單保存標籤嗎?

我找到寶石文檔混亂,因爲它表明:

設置

類用戶<的ActiveRecord :: Base的acts_as_taggable#別名 acts_as_taggable_on:標籤acts_as_taggable_on:技能:興趣 結束

class UsersController < ApplicationController def user_params params.require(:user).permit(:name,:tag_list)## Rail s 4強參數用法end end

爲什麼不允許的參數包含a:skill_list和an:interest_list,因爲這些特定模型被用作標記?我應該「tag_list」添加到我的提案允許PARAMS即使可以添加唯一的標籤從具體型號定義的標題,我中列出:

acts_as_taggable_on :randd_maturities, :randd_fields, :randd_purposes, :randd_activities 

服務器日誌顯示:

ActsAsTaggableOn::Tagging Load (1.6ms) SELECT "taggings".* FROM "taggings" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 [["taggable_id", 17], ["taggable_type", "Proposal"]] 
    ActsAsTaggableOn::Tag Load (1.7ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND (taggings.context = 'randd_fields' AND taggings.tagger_id IS NULL) [["taggable_id", 17], ["taggable_type", "Proposal"]] 



    ActsAsTaggableOn::Tagging Load (2.8ms) SELECT "taggings".* FROM "taggings" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 [["taggable_id", 17], ["taggable_type", "Proposal"]] 
    ActsAsTaggableOn::Tag Load (3.0ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND (taggings.context = 'randd_fields' AND taggings.tagger_id IS NULL) [["taggable_id", 17], ["taggable_type", "Proposal"]] 
    Randd::Field Load (1.6ms) SELECT "randd_fields".* FROM "randd_fields" ORDER BY "randd_fields"."title" ASC 


Processing by ProposalsController#update as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"BF7l9/0QTVN3A==", "proposal"=>{"title"=>"asdf", "byline"=>"asdf", , "randd_field_list"=>["", "1"], 

Unpermitted parameter: randd_field_list 
+0

顯示此請求的日誌,尤其是傳入參數。在文檔中使用:tag_list,因爲:標籤默認爲'acts_as_taggable_on'。他們也應該將skill_list添加到該示例中。 –

+0

@AlexKojin - 我添加了服務器日誌提取 – Mel

回答

0

您發送* _list參數的數組。嘗試爲許可方法中的每個_list添加[]:

params.require(:proposal).permit(
    :title, 
    randd_maturities_list: [], 
    randd_field_list: [], 
    randd_purposes_list: [], 
    randd_activities_list: []) 
+0

這會停止未經許可的參數錯誤,但標記將保存到提議中。我是否需要在提案控制器中執行某些操作,才能將表單選擇添加到randd_field_list的提案數組中? – Mel

+0

我認爲,沒有。你需要檢查你的日誌。 –