ActiveAdmin / Formtastic има много преминавания с поле

Имам потребители и групи.

Users has_many :groups, :through => Membership
Groups has_many :users, :through => Membership

Добре засега. Членството вече има булево поле, manager.

Потребителите могат да бъдат мениджъри на групи и групите могат да имат повече от един мениджър. Навсякъде в сайта това работи добре и не създава проблеми. Сега те трябва да управляват това по някакъв начин. Използвам Active Admin (Formtastic) и имам представени полета :as => :check_boxes.

Потребителите харесват квадратчетата за отметка. Те искат да поставя второ квадратче за отметка до това, което превключва дали даден потребител е в група, за да определи дали потребителят е мениджър на тази група.

Как мога да направя това? Опитах да използвам системата f.has_many, но това създава един запис за всяко съществуващо членство, не предоставя начин за изтриване на членства и не е това, което потребителите искат. Искам да покажа ВСЕКИ потребител, да покажа квадратче за отметка, за да определя дали съществува членство за това сдвояване, и да покажа друго квадратче за отметка до него за стойността на полето на мениджъра.


person charredUtensil    schedule 28.03.2013    source източник


Отговори (1)


Това, което искате, е да имате AJAX повикване, когато щракнете върху квадратчето за отметка. Ако приемем, че използвате coffeescript за вашите javacript файлове и jQuery, за да дадете обща насока (не е тествано), използвайте атрибут в квадратчето си, като този:

<checkbox data-group=<%=group.id%> data-user=<%=user.id%> data-something="true">

След това създайте javascript функция, която взема тези данни-нещо и поставете функция, щракнете върху нея, която извиква страница:

$document.ready ->
  $(["data-something]").click ->
    user = this.attr("data-user")
    group = this.attr("data-group")
    $.post("/some/url", {value: this.value, user: user, group: group})

Добавете маршрута към този контролер, след това при действие от този url, просто се справете с логиката

Class SomeController
  def url
    user = User.find(params[:user])
    ....
  end
end

Ако имате повече проблеми, задайте по-конкретен въпрос по-късно.

person fotanus    schedule 28.03.2013