1

タグの送信を処理するために、ブートストラップ タグの入力を使用しています。私もacts-as-taggable-onを使っています。

フォームに情報を入力するとうまくいきます。正しく記入されたフォームを送信すると機能します。ただし、検証に失敗した場合、ページは以前のタグが 1 つのタグに結合されてレンダリングされます。

送信前の html は次のとおりです。

<form action="/items" method="post">
<div class="bootstrap-tagsinput">
    <span class="tag label label-info">
        "foo"<span data-role="remove"></span>
    </span>
    <span class="tag label label-info">
        "bar"<span data-role="remove"></span>
    </span>
    <span class="tag label label-info">
        "foobar"<span data-role="remove"></span>
    </span> 
</div>
<input type="text" value name="item[tag_list]" id="item_tag_list" style="display: none;">
</form>

検証失敗後

<div class="bootstrap-tagsinput">
    <span class="tag label label-info">
        "foo bar foobar"<span data-role="remove"></span>
    </span>
</div>

私のコントローラー:

  def create
    Item.transaction do

      @item= Item.create(name: item_params[:name],
                                        tag_list: item_params[:tag_list], 
                                        created_by: current_user.id,
                                        status: Item::STATUS[:pending])


      if @item.errors.empty?
        @user_item = @item.user_items.build(user_id: current_user.id)

        if @user_item.save
          flash[:notice] = "Thank you for your item request! Your request will be processed within the next 5 days."
          redirect_to items_path
        else
          render :new
          raise ActiveRecord::Rollback, "UserItem create failed"
        end

      else
        render :new
      end
    end
  end

private

    def item_params
      params.require(:item).permit(:name, :tag_list)
    end
end

ユーザーが入力したときと同じように、このパラメーターを複数のタグとして表示する方法が必要です。

4

1 に答える 1

0

カンマで区切られた文字列で tag_list を設定すると、文字列の配列になります。検証が失敗した場合は、tag_list 属性をタグの文字列に設定する必要があります。これらの 2 行は、これを達成するのに役立ちました。

@item.tag_list.remove(item_params[:tag_list], parse: true)
@item.tag_list.add(item_params[:tag_list])
于 2016-01-30T03:41:51.073 に答える