Как принять список, разделенный запятыми, для построения тегов для модели? - PullRequest
2 голосов
/ 08 марта 2012

Я отключаю действие activ_as_taggable_on из-за ограниченной гибкости моего текущего приложения.Вместо этого я создаю свои теги с нуля как их собственную модель.Тем не менее, я уже пропускаю метод "@ model.tag_list" для форм, который разделял бы разделенный запятыми ввод пользователя и создавал отдельные теги.Моя модель "taggable" - это видео, и мне любопытно, как написать метод, который по сути может действовать как "tag_list"?

Пример:

<%= form_for @video do %>
  <%= f.text_field :tag_list %>
  ....

Учитывая ввод:"one, two, three" Создает три тега как дочерние элементы @video.

@video.tags.each do |tag|
  puts tag.name
end

=> one
two
three

РЕДАКТИРОВАТЬ

Мне бы очень хотелось, чтобы это было в модели Tag, чтобы форма не загромождала мой контроллер.Может быть, как пользовательский атрибут?Может быть, видео модель будет иметь больше смысла?Я знаю, как сделать пользовательский метод для возврата пользовательских данных, но не назначать его.Некоторые исследования указывают мне на это (еще не проверено)

video.rb

def tag_list=value
  value.split(',').each do |tag|
    self.tags.build(:name => tag).save
  end
end

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Кажется, мой пример кода работал

video.rb

def tag_list=value
  value.split(',').each do |tag|
    self.tags.build(:name => tag).save
  end
end

EDIT

Также необходимо добавить, чтобы заставить его работать в форме:

def tag_list
  self.tags.join(',')
end  
0 голосов
/ 08 марта 2012

Вы можете оставить tag_list в качестве атрибута на видео, тогда в вашем создании вы можете просто иметь что-то вроде:

def create
  @video = Video.new(params[:video])
  if @video.save
    params[:video][:tag_list].split(',').each do |tag|
      @video.tags.create_by_name(tag)
    end
  else
    render :new
  end
end
...