Как сделать теги редактируемыми встроенными (или отправляемыми без необходимости переходить в режим редактирования модели)? - PullRequest
0 голосов
/ 24 октября 2010

У меня есть модель с названием Company, и в представлении Show есть следующее:

<div id = 'tags'>
  <strong>Tags:</strong>
  <% unless @company.tag_list.empty? %>
     <%= @company.tag_list %>
  <% end %>
  <% form_remote_tag(:url => {:action => 'update'},
                     :update => 'tags') do  %>
    <%= text_field :company, :tag_list %>   
       <%= submit_tag 'Save' %> 
  <% end %>
</div>

Я использую драгоценный камень activ_as_taggable_on.

Это метод обновления в контроллере компании:

  def update
    @company = Company.find(params[:id])
    if @company.update_attributes(params[:company])
      flash[:notice] = "Successfully updated company."
      redirect_to @company
    else
      render :action => 'edit'
    end
  end

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

ОБНОВЛЕНИЕ: это ошибка, которую я получаю (похоже, она не использует действие обновления:

POST http://localhost:3000/companies/10
No action responded to 10. Actions: create, destroy, edit, email_this_week, index, new, show, and update

Хммм, не уверен, почему он это делает .... он должен выполнить действие обновления, верно? Нужно ли что-то делать в моих маршрутах (даже если я указал действие?)

Ответы [ 2 ]

0 голосов
/ 24 октября 2010

Вы почти у цели.

Сначала вы создаете частичную tags, которая отображает ваши теги и вашу ajax-форму (которую вы указали в своем вопросе).

Затем внутри вашего контроллера-метода вы пишете:

def update
  @company = Company.find(params[:id])
  if request.xhr?
    # add the given tag to the company
    @company.tags << params[:company][:taglist]
    @company.save
    render :partial => 'tags'
  else
    if @company.update_attributes(params[:company])
      flash[:notice] = "Successfully updated company."
      redirect_to @company
    else
      render :action => 'edit'
    end
  end
end

Что я делаю: я проверяю, является ли запрос ajax-запросом (xhr?), а затем пытаюсь обновить теги из указанного поля: вам придется исправить этот код, я думаю. Я предполагаю, что просто выполнение update_attributes не работает, так как вы захотите добавить тег в список существующих тегов. Если это удастся, вы визуализируете частичное, которое заменит предыдущее, из-за опции update, указанной вами в форме.

Это должно помочь вам начать.

Чтобы улучшить его, вы должны добавить к каждому из ваших тегов изображение (красный крест) со ссылкой для удаления данного тега.

0 голосов
/ 24 октября 2010

Есть несколько плагинов jquery, которые назывались edit-in-place ... Может быть, это поможет вам:

https://stackoverflow.com/questions/708801/whats-the-best-edit-in-place-plugin-for-jquery

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...