Rails 5 – Acts as Taggable在gem上 – 简单表单集合选择已定义的标签列表

我试图学习如何使用Acts作为Taggable在Rails 5的gem上。

我使用简单的表格forms。 我认为问题的一部分源于提案与randd_fields之间的模型没有关联。

我有名为Proposal和Randd :: Field的模型。 我正在尝试使用标签标记提案,这些标签是:Randd :: Field表的title属性。

我的模特有:

提案

class Proposal < ApplicationRecord acts_as_taggable_on :randd_maturities, :randd_fields, :randd_purposes, :randd_activities # acts_as_taggable # acts_as_taggable_on :skills, :interests 

的RandD ::场

(没有关于提案的关联)。

提案助手

 module ProposalsHelper include ActsAsTaggableOn::TagsHelper 

在我的提案表单中,我尝试添加标签:

   

第一个注释表单输入字段用于允许我输入标记。 但是,标签是文本,我可以写任何我想要的东西。 这不是我想要的。 我希望标签的选择是:我的Randd :: Field模型中定义的:title属性。

我在下面尝试的第二个选项确实生成了一个列表,但是当我尝试将其保存为提案模型上的randd_field_list时,它会保存Randd :: Field表中的:id属性而不是:title。

当我尝试从表单输入行删除:id组件时,我收到一条错误消息:

 {} is not a symbol nor a string 

当我尝试从表单输入行删除{}时,我收到一条错误消息:

 {multiple: true} is not a symbol nor a string 

任何人都可以看到如何使用Acts作为Taggable在gem上,以便标签是作为标记对象的模型预定义的标题属性? 我不想要自由forms的标签。

提案控制器具有:

 def proposal_params params.require(:proposal).permit(:title, :description, :trl_id, randd_maturities_list: [], randd_field_list: [], randd_purposes_list: [], randd_activities_list: [], Processing by ProposalsController#update as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"Cy 

然后在该块中降低,这是我在表单中做出的选择:

 "randd_field_list"=>"Aerospace Structures", 

然后在该块的末尾:

 Unpermitted parameters: randd_maturity_list, randd_field_list (0.1ms) BEGIN 

我尝试了其中的每一个 – 它们都不起作用。

       @randd_fields,:label_method => :title,:value_method => :title,:label => "Fields" ,:include_blank => false, :multiple => true %> 

顶部的一个用于为randd_field_list分配值,但它不允许使用我在Randd :: Field表上的预定义:title属性作为标记。

当我尝试保存表单时,其余的尝试会给出一个不允许的参数错误。

替换:id with :title

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

您希望将tag.title而不是id作为选定的选项值传递。 http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select

要解决

替换:id with:title

就像钟说的那样。

我认为你遇到的问题是因为你的代码是单一的。 相反它应该是复数。 希望它有所帮助