我正在尝试学习如何在Rails 5中使用Acts作为Taggable。
我使用简单的表格形式。我认为问题的一部分源于提案与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
在我的提案表单中,我尝试添加标签:
<%#= f.text_field :randd_field_list, input_type: "textbox", name:"proposal[randd_field_list][]", html_options: { style: 'width: 100%' } %>
<%= f.collection_select :randd_field_list, Randd::Field.order(:title), :id, :title, {}, {multiple: true} %>
第一个带注释的表单输入字段用于允许我输入标记。但是,标签是文本,我可以写任何我想要的东西。这不是我想要的。我希望标签的选择是:我的Randd :: Field模型中定义的:title属性。
我在下面尝试的第二个选项确实生成了一个列表,但是当我尝试将其保存为提案模型上的randd_field_list时,它会从Randd :: Field表中保存:id属性,而不是:title。< / p>
当我尝试从表单输入行删除:id组件时,出现错误:
{} is not a symbol nor a string
当我尝试从表单输入行删除{}时,出现错误说:
{multiple: true} is not a symbol nor a string
任何人都可以看到如何使用Acts作为Taggable在gem上,以便标签是从作为标记对象的模型中预定义的标题属性?我不想要自由格式标签。
提案控制器有:
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
我尝试了其中的每一个 - 它们都不起作用。
<%#= f.text_field :randd_field_list, input_type: "textbox", name:"proposal[randd_field_list][]", html_options: { style: 'width: 100%' } %>
<%#= f.collection_select :randd_field_list, Randd::Field.order(:title), :title, :title, input_html: { multiple: true } %>
<%#= f.input 'randd_field_list',
options_from_collection_for_select(@randd_fields, :title, :title),
multiple: true %>
<%#= f.collection_select 'randd_field_list',
options_from_collection_for_select(@randd_fields, :title, :title),
multiple: true %>
<%= f.input :randd_field_list,:collection => @randd_fields,:label_method => :title,:value_method => :title,:label => "Fields" ,:include_blank => false, :multiple => true %>
最上面的一个用于为randd_field_list分配值,但它不允许在Randd :: Field表上使用我的预定义:title属性作为标记。
当我尝试保存表单时,其余的尝试会给出一个不允许的参数错误。
答案 0 :(得分:1)
将:id
替换为: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
答案 1 :(得分:1)
解决
替换:id 同 :标题
像钟说的那样。
我认为你遇到的问题是因为你的代码是单数的。相反它应该是复数。 希望有所帮助