2016-11-22 15 views
0

私はActiveadminを使用していて、ユーザーがnotebooknoteを追加するフォームを選択しています。以前の選択に基づくレールコレクション

ただし、ユーザーがノートブックとして選択した内容に基づいてそのコレクションを動的に変更したいと考えています。ノートのnotebook_typeevernoteの場合、私はユーザにNote.allに含まれるノートのいくつかを選択させたくありません。 (私は非常に親切なStackOverflowユーザーの助けを借りてその範囲を取得しました)。参考のため、ここでその方法は

です:

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 

私はすでに、フォームの別のセクションを処理するために、いくつかのjQueryを使用して、このような変更イベントに使用しています:

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

しかし、本質的にどういうわけかcollection:Note.allNote.notes_without_check_listsの間で切り替えることは、ユーザーがどのノートブックを選択したかによって異なります。

ご協力いただきありがとうございます。

答えて

0

IMHOの場合、最高の解決策はノートブックIDを受け取って、すべての使用可能なノートのJSONを返す新しいmember_actionを作成することです。

例:今すぐ

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

、要求時にノートブックIDの変更を行うためにはjQueryを使用して、古い選択ボックスの明確なすべてのオプションと新しいオプションを追加します。

例:

$("#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>'); 
     }); 
    }); 
}); 

これはアイデアです...あなたのソリューションのベースとしてそれを使用しています。

関連する問題