Rails 5 - 在 gem 上充当可标记 - 定义的标签列表

Rails 5 - Acts as Taggable On gem - defined tag lists

我正在尝试学习如何使用 Acts as Taggable On gem 和 Rails 5.

我有名为 Proposal 和 Randd::Field 的模型。我正在尝试使用 Randd::Field table.

的 :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::Field

(与提案无关联)。

求婚助手

module ProposalsHelper

     include ActsAsTaggableOn::TagsHelper

在我的申请表中,我尝试添加标签:

  <%#= 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} %>

在我的提案控制器中,我已将 randd_field_list 的数组列入白名单(其中应包含通过表单输入的每个标签)。

def proposal_params
      params.require(:proposal).permit(:title,  :randd_maturity_list, :randd_fields_list, 

我可以通过控制台添加标签。我无法在提案表本身中使用它。在控制台中我可以做:

p = Proposal.first
p.randd_field_list = [Randd::Field.last.title, Randd::Field.first.title]
p.save

这可以将第一个和最后一个 Randd::Field 的标题添加到提案的标签数组中。

但是,我不知道如何在表单中实现这一点。 rails 的控制台中没有显示任何错误。我看不出如何解决这个问题。

Acts as Taggable On gem 文档 tutorial for editing tags - 它建议向 Randd::Fields 控制器添加更新方法,以便可以更新标签。采纳了这个建议,我尝试将类似的操作添加到我的 Randd::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

这没有任何作用。我不确定我没有标签控制器(根本没有)是否是一个问题,或者这是否是用于标记 object 的所有控制器的通用标签。提案控制器本身是否需要任何东西来处理标签的创建和更新(对于我来说是 Randd::Field 模型中实例的标题?

任何人都可以看到我需要做什么才能使用此 gem 提供的标记功能吗?如果我可以在控制台中做到这一点,那么我应该能够在代码中做到这一点——但我完全不清楚如何去实现它。

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

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