Rails : jquery에서 컨트롤러의 액션을 두드리고 jquery로 변수를 반환하는 방법
만든 것
소설가가 되려는 주소를 입력,
버튼을 누르면 입력 대상의 제목, 세부 사항을 가져오고 ajax로 표시.

개요
【jquery로 Rails 컨트롤러의 함수를 불러, 변수를 화면에 되돌린다】
라는 방법은 보이지 않았기 때문에 귀중한 것이라고 생각하고 있습니다.
【개요】
URL 입력란의 URL을 jquery로 감지
↓
컨트롤러의 고유 함수로 보내기
↓
함수 내에서 스크래핑, 인스턴스 변수에 정보를 넣습니다.
↓
화면에 다시 보내기
↓
jquery로 id 지정 등을하고 정보를 화면에 표시
소스 설명
이번 조작하는 화면은
Matome 모델의 show 화면에 있습니다.
컨트롤러에 함수를 정의. 스크래핑은 아래를 참조하십시오.
Rails 스크래핑 기법 Mechanize 사용법
app/controllers/matomes_controller.rb
def scraping_novel
require 'mechanize'
agent = Mechanize.new
page = agent.get(params[:url])
@novel_title = page.at('.novel_title').inner_text
@novel_description = page.at('#novel_ex').inner_text
respond_to do |format|
format.js
end
end
새 경로 추가
루트를 추가하지 않으면 id에 함수 이름이 포함되지 않습니다.
config/routes.rb
Rails.application.routes.draw do
get "matomes/scraping_novel"
resources :novels
resources :matomes
devise_for :users
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
root 'matomes#index'
end
새로운 js 파일을 만듭니다.
컨트롤러 내에서 만든 함수와 같은 이름의 js.erb 파일을 views/컨트롤러 아래에 작성하십시오.
컨트롤러에서 얻은 두 개의 인스턴스 변수를 구문 분석,
나누기 위해 사이에 delimiter라는 단어를 넣습니다.
app/views/matomes/scraping_novel.js.erb
<%= @novel_title %>delimiter<%= @novel_description %>
이 js는
· 컨트롤러에 정보 보내기
· 컨트롤러로부터 정보를 받고 표시
두 가지를 수행합니다.
보낼 때는
URL에 함수 이름,
data내에 컨트롤러에 보내고 싶은 정보를 써 주세요.
params[:url]와 같은 형태로 컨트롤러 내에서 꺼낼 수 있습니다.
success: function(data)의 data에 js.erb 파일에 쓴 내용이 들어옵니다.
제목과 줄 사이에 delimiter라는 단어를 끼워 넣었기 때문에,
그래서 나누어 jquery로 양식에 입력하고 있습니다.
URL이 가정한 것과 다른 경우
화면상에 경고를 내게 되어 있습니다.
app/assets/javascripts/application.js
$("#get-novel-info-button").click(function(){
$.ajax({
url: "scraping_novel",
type: "GET",
data: { url : $("#modal-novel-url").val()
},
dataType: "html",
success: function(data) {
console.log('success');
console.log(data);
// app/views/matomes/scraping_novel.js.erb
//上記ファイルの中身を文字列"delimiter"で分ける
var split_datas = data.split("delimiter");
$("#modal-novel-title").val(split_datas[0]);
$("#modal-novel-description").val(split_datas[1]);
},
error: function(data) {
console.log('error');
alert("URLが不正、もしくはこのURLには対応していません。");
}
});
});
감상
정말 감동했다.
스크래핑 놀랍습니다. ajax 대단합니다.
이것은 컨트롤러를 통해 다양하게 응용할 수있을 것 같고 너무 재미 있습니다.
참고 URL
Rails에서 jQuery에서 ajax
jQuery 내에서 Rails의 Action을 두드리는
Reference
이 문제에 관하여(Rails : jquery에서 컨트롤러의 액션을 두드리고 jquery로 변수를 반환하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Kohei_Kishimoto0214/items/d32c59784a995798ba02텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)