분명히 할 수있는 방법이며, 약간의 작업이지만, 일단 멈추게되면 매우 쉽습니다. .
먼저 선택 상자의 change
이벤트에 jQuery 함수를 첨부해야합니다. 이것은 application.js
파일에 자바 스크립트를 추가하여 수행 할 수 있습니다. 우리는 javscript가 unobtrustive으로 유지되도록 여기에서이 작업을 수행하려고합니다. 당신은 당신의 application.js
파일에 이런 식으로 뭔가를 시도 할 수 있습니다 :이 무엇
$(document).ready(function(){
$("#select_field_id").change(function(){
var id = $(this).children(":selected").val();
var params = 'some_id=' + id;
$.ajax({
url: "/some_controller/change_folder",
data: params
})
});
는 ID select_field_id
와 선택 필드의 change
이벤트에 익명 함수를 연결합니다. 해당 필드가 변경되면 선택한 옵션의 id
이 var id
에 저장되고 var params = 'some_id=' + id;
으로 전송할 요청에 대한 매개 변수를 만듭니다. some_id
은 변경하려는 ID의 ID가됩니다 (예 : folder_id
).
이제 컨트롤러에서이 요청을 처리 할 메서드를 만들어야합니다. 그래서 폴더 예에 가고, 폴더 컨트롤러에이 추가
def change_folder
@folder = Folder.find(params[:some_id])
respond_to do |format|
format.js
end
end
이 단순히 change_folder
로 아약스의 요청에 의해 전송 된 ID를 기준으로 폴더를 찾습니다. 또한 렌더링 할 해당 change_folder.js.erb
또는 change_folder.js
파일을 찾습니다.
이제 change_folder.js.erb
파일을 작성해야합니다. 페이지 일부의 HTML을 새 폴더로 대체해야하므로 div
또는 고유 한 ID가있는 다른 섹션이 있어야합니다.
change_folder.js.erb
내부에서, 우리는 이것을 쓸 수 있습니다 :이 change_folder.js.erb
파일과 같은 디렉토리에 _folder.html.erb
라는 부분을 렌더링
$('#your_div').html("<%= escape_javascript(render(partial: "folder",
locals: { :folder => @folder })).html_safe %>")
. 부분은 필드를 표시하기위한 @folder 변수를 사용해야합니다, 그래서 당신은 같은 필요 : 당신의 _folder.html.erb
부분 내부
<%= @folder.name %>
<%= @folder.last_updated %>
합니다. .name
및 .last_updated
은 물론 폴더 모델의 속성으로 구성되어 있습니다. 폴더 모델에 부여한 속성을 대신 사용해야합니다.
당신이 있어야 할 곳으로 가야합니다. 명확한 것이 필요한 경우 알려주십시오.
고맙습니다. 문제가 해결 된 것 같습니다. 자세한 내용이 필요하면 다시 돌아올 것입니다. – user1455116