基于先前选择的Rails集合

时间:2016-11-22 01:19:31

标签: jquery ruby-on-rails activeadmin

我正在使用Activeadmin,并且有一个表单,用户可以选择要note添加f.input :notebook f.input :note, as: :select, collection: Note.all 的{​​{1}}。

notebook_type

但是,我希望能够根据用户选择的笔记本动态更改该集合。如果笔记本的evernoteNote.all,我不希望允许用户选择class Notebook < ActiveRecord::Base has_many :notes def self.notes_without_check_lists all.reject { |notebook| notebook.notes.any? { |note| note.note_type == 'check_list' } } end end 中包含的某些注释。 (我已经在一个非常友好的StackOverflow用户的帮助下得到了这个范围。)

供参考,这是方法:

$("#note_notebook_id").on 'change', (e) ->

我已经使用一些jQuery来处理表单的另一部分并使用这样的on change事件:

collection:

但基本上,我想以某种方式Note.allNote.notes_without_check_lists之间切换.push(),具体取决于用户选择的笔记本。 < / p>

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

恕我直言,最好的解决方案是创建一个新的member_action,它接收一个笔记本ID并返回所有可用笔记的JSON。

示例:

member_action :notes, method: :get do
  notebook = Notebook.find params[:notebook_id]
  render :json, notebook.notes_without_check_lists
end

现在,使用jQuery在笔记本ID更改时发出请求,清除旧选择框的所有选项并添加新选项。

示例:

$("#note_notebook_id").on('change', function() {
    var nb_id = $(this).val();
    $.get('http://yourdomain/admin/notebook/notes?notebook_id=' + nb_id, function(result) {
        $('#note').empty();
        $.each(result.data, function(item) {
           $('#note').append('<option value="'+item.id+'">'+item.name+'</option>');
        });
    });
});

这是一个想法......用它作为解决方案的基础。