我正在使用Activeadmin,并且有一个表单,用户可以选择要note
添加f.input :notebook
f.input :note, as: :select, collection: Note.all
的{{1}}。
notebook_type
但是,我希望能够根据用户选择的笔记本动态更改该集合。如果笔记本的evernote
为Note.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.all
和Note.notes_without_check_lists
之间切换.push()
,具体取决于用户选择的笔记本。 < / p>
非常感谢您的帮助。
答案 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>');
});
});
});
这是一个想法......用它作为解决方案的基础。