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
您需要允许列表参数作为数组,并使表单上的标记列表字段传递数组而不是文本
我正在尝试学习如何使用 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
您需要允许列表参数作为数组,并使表单上的标记列表字段传递数组而不是文本