0

I am trying to set up users on an asset, and I am running into the problem of not being sure how to pass my max_users method from asset.rb to my JS code. I am trying to use the max_users method with the Cocoon gem to have the "Add Another" button disappears when it reached the specified max_users allowed for that asset.

Hardware will always be set with a max_user of 1, while software will never have a max_user value.

Max_users works as it should, as does profile_type. The JS works as it is, but instead of it always stopping at 1, I need to have it register the value in max_users, and base the show/hide off of that.

Any help will be much appreciated. And thank you in advance.

JS:

$ ->
  check_to_hide_add_link = ->
    if $("#assets_users .nested-fields").length is 1
      $("#assets_users .links a").hide()
    else
      $("#assets_users .links a").show()

  $("#assets_users").bind "cocoon:after-insert", ->
    check_to_hide_add_link()

  $("#assets_users").bind "cocoon:after-remove", ->
    check_to_hide_add_link()

  check_to_hide_add_link()

Asset.show:

- if @asset.users.empty?
    = simple_form_for([@asset_profile, @asset]) do |f|
      = f.input :max_users, as: :hidden
      #assets_users
        = f.simple_fields_for :assets_users do |assets_user|
          = render "assets_user_fields", f: assets_user
        .links
          = link_to_add_association "Add Another User", f, :assets_users
        = f.submit

_assets_user_fields:

.nested-fields
  = f.input :user_id, collection: @users.order(:last_name), :label => "User"
  = link_to_remove_association "Remove", f

Asset.rb:

def max_users
  if self.asset_profile.profile_type == "Hardware"
    1
  end
end
.
.
.
def length_of_users
  if user_ids.count > max_users
    errors.add(:users, "You can only add a maximum of #{max_users} users")
  end
end
Bryan Ash
  • 4,385
  • 3
  • 41
  • 57
Briknthewall
  • 149
  • 1
  • 16

1 Answers1

0

Had to retrieve the value of max_users, and convert it into an integer. Then just plugged it in so that if the amount of fields showing up was greater than, or equal to, the max_users, the form would stop generating new fields.

$ ->
  check_to_hide_add_link = ->
    max_users = parseInt($("#asset_max_users").val(), 10)
    if $("#assets_users .nested-fields").length >= max_users
      $("#assets_users .links a").hide()
    else
      $("#assets_users .links a").show()

  $("#assets_users").bind "cocoon:after-insert", ->
    check_to_hide_add_link()

  $("#assets_users").bind "cocoon:after-remove", ->
    check_to_hide_add_link()

  check_to_hide_add_link()
Briknthewall
  • 149
  • 1
  • 16