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
就像钟说的那样。
我认为你遇到的问题是因为你的代码是单一的。 相反它应该是复数。 希望它有所帮助