2011-02-01 2 views
2

Прежде всего, позвольте мне начать с того, что я знаю, что здесь был задан этот точный вопрос. Но на него не ответили, и я не хочу поднимать зомби-нитку больше года назад.Разбор тегов блога с текстового поля

Во-вторых, я не заинтересован в использовании плагинов, да, я хочу заново изобрести колесо. Я пишу этот блог, пытаясь изучить RoR.

Я пытаюсь воспроизвести поведение прикрепления тегов к сообщению в моем приложении Rails.

сообщений форма выглядит следующим образом

<%= form_for @post do |post_form| %> 
    ... 
    <%= render :partial => 'tags/form', 
     :locals => { :form => post_form } %> 
    ... 
<% end %> 

И теги формируют следующим образом

<%= form.fields_for :tags do |tag_form| %> 
    <div class="field"> 
    <%= tag_form.label :tags, 'Tags' %> <small>(comma separated)</small><br /> 
    <%= tag_form.text_field :tags %> 
    </div> 
<% end %> 

Проблема Я бегу в, «метки» не является полем на моем классе сообщение , Мои модели сообщений и тегов имеют отношения HABTM с PostsTagsJoinTable между ними. Итак, каким-то образом мне нужно проанализировать текстовое поле тегов (используя string.split (',') и передать полученный тег Strings в мой контроллер, чтобы мой контроллер мог создавать и связывать теги вместе с новым сообщением в блоге.

ли мои настройки просмотров правильно, что мои контроллеры должны выглядеть как Post.create специально

Благодаря

ответ

2

Я понимаю, что вы не заинтересованы в плагинах, но они справиться с этим, как это:?.! Класс Post имеет метод tag_list=, который делает split(',') из строки, а затем выполняет поиск и добавляет Tag s из HABTM relati на. Вы можете определить, что Post#tag_list= с этим:

def tag_list=(tags) 
    self.tags.clear # clears all the relations 
    tags.split(',').each do |tag| 
    self.tags << Tag.find_by_title(tag) # and assigns once again 
    end 
end 

Чтобы предоставить список тегов, то есть. для поля формы, чтобы существующие теги, сделать это:

def tag_list 
    self.tags.collect do |tag| 
    tag.name 
    end.join(',') 
end 

Таким образом, вы можете теперь использовать <%= text_field_tag :post, :tag_list, :value => @post.tag_list %>.

+0

Спасибо. Где в Post.create я бы разместил # tag_list? И как я могу получить введенные пользователем теги из представления? –

+1

Поместите этот метод #tag_list в вашу ** модель ** Post и внутри формы выполните '<% = post_form.text_field: tag_list%>'. Если он не присваивает значение в форме, укажите параметр '<% = post_form.text_field: tag_list,: value => @ post.tag_list%>'. – farnoy

Смежные вопросы