Самый простой способ добавить/удалить отношения модели

Мне интересно, как лучше всего сделать небольшое обновление моих моделей. Я имею в виду, что я хотел бы иметь кнопку, которая создавала бы или уничтожала отношения между двумя моими моделями через отношение has_many :through. Итак, у меня есть пользователи, DVD, очереди и DvdQueues.

Я хочу добавить простую кнопку на многие страницы, при нажатии на которую в очередь пользователей добавляется DVD-диск. Каков наилучший способ добиться этого? Должен ли я загружать простую форму на каждой странице? Должен ли я связать кнопку с действием контроллера, которое ее обрабатывает? Если я использую форму, нужны ли мне вложенные атрибуты?

Спасибо!


person Matthew Berman    schedule 21.06.2012    source источник


Ответы (2)


Вы можете добавить действие add_dvd к нужному контроллеру и использовать button_to(doc) помощник. Также вы можете использовать ajax. Просто добавьте опцию remote: true к кнопке и работайте с add_dvd и обрабатывайте свой ответ :)

person caulfield    schedule 21.06.2012

Самый простой способ - использовать отдельный контроллер для DvdQueues только с действиями создания/удаления, а затем в представлении использовать link_to с метод javascript-helper Rails :method (в данном случае:post|:delete)

Например:

class DvdQueuesController < ApplicationController
  def create
    # params[:dvd_queue] = {"dvd_id": x, "queue_id": y}
    @user.dvd_queues.create params[:dvd_queue]
    redirect_to dvds_path
  end

  def destroy
    dvd_que = @user.dvd_queues.find_by_id params[:id]
    dvd_que.destroy
    redirect_to dvds_path
  end
end

 

module DvdQueuesHelper
  def link_to_add_or_remove_from_queue(dvd, text)
    if @user.dvd_queues.exists? :dvd_id => dvd.id
      link_to text, dvd_queues_path(dvd.id), :method => :delete
    else
      link_to text, dvd_queues_path, :method => :post
    end
  end
end
person zykadelic    schedule 21.06.2012