Ruby on rails Rails 5-在gem定义的标记列表上充当标记

Ruby on rails Rails 5-在gem定义的标记列表上充当标记,ruby-on-rails,ruby,associations,acts-as-taggable-on,Ruby On Rails,Ruby,Associations,Acts As Taggable On,我正在尝试学习如何在Rails 5的gem上使用Acts作为标记 我有一个叫做Proposal和Randd::Field的模型。我试图用标签来标记提案,这些标签是Randd::Field表的:title属性 我的模型有: 提案 class Proposal < ApplicationRecord acts_as_taggable_on :randd_maturities, :randd_fields, :randd_purposes, :randd_activities # ac

我正在尝试学习如何在Rails 5的gem上使用Acts作为标记

我有一个叫做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
在我的提案表中,我尝试添加标签:

  <%#= f.select :tag_list %>
        <%#= f.input :randd_field_list,  collection: @randd_fields, label_method: :title,  include_blank: false %>
        <%= f.text_field :randd_field_list, input_html: {value: f.object.randd_field_list.to_s} %>
我可以通过控制台添加标签。我无法在提案表中实现这一点。在控制台中,我可以执行以下操作:

p = Proposal.first
p.randd_field_list = [Randd::Field.last.title, Randd::Field.first.title]
p.save
这可以将第一个和最后一个Rand::字段的标题添加到提案上的标记数组中

然而,我不知道如何在表单中实现这一点。在rails的控制台中没有显示错误。我不知道该怎么弄清楚

在gem文档中充当标记-它建议向Randd::Fields控制器添加一个更新方法,以便可以更新标记。根据这一建议,我尝试将类似的操作添加到我的Rand::FieldsController中,如下所示:

def edit
end

    def update
  @randd_field_list = ActsAsTaggableOn::Randd::Field.find(params[:id])

  respond_to do |format|
    if @randd_field_list.update(randd_field_list_params)
      format.html { redirect_to root_path, notice: 'Tag was successfully updated.' }
      format.json { render :show, status: :ok, location: @randd_field_list.proposal }
    else
      format.html { render :edit }
      format.json { render json: @tag.errors, status: :unprocessable_entity }
    end
  end
这没用。我不确定这是否是一个问题,我没有一个标签控制器(在所有),或者如果这是一个通用标签用于所有控制器的标签对象。提案控制器本身是否需要任何东西来处理标记的创建和更新(对于我来说,标记是Randd::Field模型中实例的标题)

有人能看到我需要做什么才能使用这个gem提供的标记功能吗?如果我可以在控制台中做,那么我应该可以在代码中做这件事,但是我完全不清楚如何实现它

def proposal_params
  params.require(:proposal).permit(:title,  randd_maturity_list: [], randd_field_list:[]
end

您需要允许列表参数作为数组,并使表单上的标记列表字段传递数组而不是文本

我尝试了这个方法。我尝试了randd_field_list:[]和randd_fields_list:[]。当我使用单数时,我得到一个"当我试图保存编辑过的表单时出现未经允许的参数错误。当我尝试使用复数形式时,我得到一个错误:未定义的方法“randd_fields_list”for#你的意思是什么?randd_field_listyep,应该是单数形式。在你的表单中,
randd_fields_list
的字段是一个文本字段,但是服务器需要一个数组。你需要upda再次感谢。我使用的是gem文档,上面说使用我在上面列出的简单形式的表达式。这肯定是错误的。非常感谢。
def edit
end

    def update
  @randd_field_list = ActsAsTaggableOn::Randd::Field.find(params[:id])

  respond_to do |format|
    if @randd_field_list.update(randd_field_list_params)
      format.html { redirect_to root_path, notice: 'Tag was successfully updated.' }
      format.json { render :show, status: :ok, location: @randd_field_list.proposal }
    else
      format.html { render :edit }
      format.json { render json: @tag.errors, status: :unprocessable_entity }
    end
  end
def proposal_params
  params.require(:proposal).permit(:title,  randd_maturity_list: [], randd_field_list:[]
end