2014-11-04 2 views
0

Я пытаюсь настроить пользователей на актив, и я сталкиваюсь с проблемой не уверен, как передать мой метод max_users от asset.rb к моему JS-коду. Я пытаюсь использовать метод max_users с драгоценным камнем Cocoon, чтобы кнопка «Добавить еще» исчезла, когда она достигла указанных max_users, разрешенных для этого актива.Javascript: Использование метода из модели в javascript-коде

Аппаратное обеспечение всегда будет установлено с max_user 1, тогда как у программного обеспечения никогда не будет значения max_user.

Max_users работает так, как должно, как и profile_type. JS работает так, как есть, но вместо этого всегда останавливается на 1, мне нужно, чтобы он регистрировал значение в max_users и основывал шоу/скрывал его.

Любая помощь будет очень признательна. И спасибо вам заранее.

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 

ответ

0

Пришлось получить значение max_users и преобразовать его в целое число. Затем просто подключите его так, чтобы, если количество отображаемых полей было больше или равно max_users, форма прекратила генерировать новые поля.

$ -> 
    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() 
Смежные вопросы