Khi làm việc với quyền sở hữu mô hình taggable được thẻ của nó hơi khác một chút.Nếu không có quyền sở hữu nó có thể nhận được thẻ của mình như sau:
@photo.tag_list << 'a tag' # adds a tag to the existing list
@photo.tag_list = 'a tag' # sets 'a tag' to be the tag of the @post
Tuy nhiên, cả hai opperations tạo taggins
, mà tagger_id
và tagger_type
là nil
.
Để có các lĩnh vực này được thiết lập, bạn phải sử dụng phương pháp này:
@user.tag(@photo, on: :tags, with: 'a tag')
Giả sử bạn thêm dòng này vào create/update
hành động của PhotosController
của bạn:
@user.tag(@photo, on: :tags, with: params[:photo][:tag_list])
Điều này sẽ tạo ra hai gắn thẻ (một và không có tagger_id/_type
), bởi vì params[:photo][:tag_list]
đã được bao gồm trong photo_params
. Vì vậy, để tránh điều đó, chỉ cần không ghi danh sách trắng :tag_list
.
Đối với Rails 3 - loại bỏ :tag_list
từ attr_accessible
.
Đối với Rails 4 - loại bỏ :tag_list
từ params.require(:photo).permit(:tag_list)
.
Cuối cùng hành động create
của bạn có thể trông như thế này:
def create
@photo = Photo.new(photo_params) # at this point @photo will not have any tags, because :tag_list is not whitelisted
current_user.tag(@photo, on: :tags, with: params[:photo][:tag_list])
if @photo.save
redirect_to @photo
else
render :new
end
end
Cũng lưu ý rằng khi gắn thẻ đối tượng bằng cách này bạn không thể sử dụng thông thường phương pháp tag_list
để lấy thẻ của một bức ảnh, vì nó tìm kiếm taggings
, trong đó tagger_id IS NULL
. Bạn phải sử dụng thay vì
@photo.tags_from(@user)
Trong trường hợp đối tượng taggable bạn belongs_to
một người dùng duy nhất bạn cũng có thể sử dụng all_tags_list
.
Tôi đang cố gắng đạt được điều tương tự. Bạn đã nhận được bất cứ nơi nào với điều này? – tsdbrown
Tôi đã hỏi về điều này trên github: http://github.com/mbleigh/acts-as-taggable-on/issues/issue/111/#issue/111 – tsdbrown
Bạn có nghĩ về việc có mô hình owner_tags thuộc về Chủ sở hữu và bài đăng? Nó sẽ đòi hỏi một chút legwork hơn, nhưng sau đó bạn sẽ biết ai sở hữu các thẻ cũng như bài mà họ thuộc về. Bạn có thể cần phải có attr_accessor: tag_list để các dạng xem biểu mẫu vẫn hoạt động và sau đó lấy mô hình để tách chúng ra thành mô hình owner_tags khi tạo/udpate. – Adam21e