Kullanıcıların gönderileri için etiket seçmelerine izin vermeliyim, ancak kapalı listeden (yalnızca yöneticinin yeni etiket ekleyebileceğini veya başka şekilde önceden tanımlanmış olduğunu söyleyebiliriz). Her gönderinin çok sayıda etiketi olabilir, bu yüzden çoklu ayırıcı olması gerekir. Maalesef, select2 raylarını ekledikten sonra etiketler DB'ye kaydedilemedi. Bunu nasıl düzeltebilirim? This benim için çalışmıyor.select2 rayları acts_as_taggable_on (simple_form) ile nasıl kullanılır
PostsController:
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
Modeli:
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
Görünüm:
= 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'
});
});
ve nasıl value_method farklıdır:
Ve View
? Teşekkürler. –@TimmyVonHeiss label_method, selektörde görüntülediğiniz şeydir, value_method, db'ye kaydetmek için geçirdiğiniz şeydir. , ör. kategorileriniz varsa ve kategorilerinde db durumunda category_id varsa, kategori adını selektörde göstermek ve kategori kimliğini db'ye geçirmek için - label_method değerini aşağıdaki gibi ayarladınız: name (kategori adı) ve value_method as: id (kategori kimliği). – weezing