Ich muss Benutzern erlauben, Tags für ihre Beiträge auszuwählen, aber von geschlossenen Liste (sagen wir, nur Admin kann neue Tags hinzufügen, oder sie sind auf andere Weise vordefiniert). Jeder Beitrag kann viele Tags haben, also muss er Multiselektor sein. Nach dem Hinzufügen von select2-rails konnten Tags leider nicht in der DB gespeichert werden. Wie kann ich es reparieren? This funktioniert nicht für mich.So verwenden Sie select2-rails mit acts_as_tagable_on (simple_form)
Posts:
class PostsController < ApplicationController
before_action :find_post, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!, only: [:new, :create, :edit, :update, :destroy]
def index
@posts = Post.page(params[:page]).per(10)
@tags = ActsAsTaggableOn::Tag.all
end
def new
@post = current_user.posts.new
@tags = ActsAsTaggableOn::Tag.all
end
def create
@post = current_user.posts.new(post_params)
if @post.save
redirect_to @post, notice: _('Post created')
else
render :new, notice: _('Something went wrong')
end
end
def show
@tags = ActsAsTaggableOn::Tag.all
end
def edit
authorize @post
@tags = ActsAsTaggableOn::Tag.all
end
def update
if @post.update(post_params)
redirect_to @post, notice: _('Post updated')
else
render :edit, notice: _('Something went wrong')
end
end
def destroy
authorize @post
if @post.destroy
redirect_to root_path, notice: _('Post deleted')
else
redirect_to @post, notice: _('Something went wrong')
end
end
private
def post_params
params.require(:post).permit(:title, :header, :content, :tag_list)
end
def find_post
@post = Post.friendly.find(params[:id])
end
end
Modell:
class Post < ActiveRecord::Base
extend FriendlyId
friendly_id :title, use: :slugged
acts_as_ordered_taggable_on :tags
belongs_to :user
validates :title, :header, :content, presence: true
validates :title, uniqueness: true
end
Ausblick:
= simple_form_for @post do |f|
= f.input :title
= f.input :header
= f.input :content, input_html: { rows: 10 }
= f.input :tag_list, collection: @tags, input_html: { multiple: true, class: 'tags' }
= f.submit 'Save', class: 'btn btn-warning'
= link_to _('Back'), :back
application.js:
$(document).ready(function(){
$('.tags').select2({
placeholder: 'Click to select',
theme: 'bootstrap'
});
});
was label_method ist und wie ist es anders als value_method? Vielen Dank. –
@TimmyVonHeiss label_method ist, was Sie im Selektor anzeigen, value_method ist, was Sie weitergeben, um in db zu speichern. z.B. Wenn Sie Kategorien haben und Beiträge category_id in db haben, möchten Sie den Kategorienamen im Selektor anzeigen und die Kategorie-ID an db übergeben - Sie setzen label_method wie folgt: name (Kategoriename) und value_method als: id (Kategorie-ID). – weezing