Ruby on RailsでURLを登録してリンク集を作成できるウェブアプリを制作中なのですが、データの新規登録ページ(new.html)の form_for ヘルパーでフォームから入力されたURLを受け取って、そのURL先のサイトのページタイトルをデータベースのテーブルに登録して index.html にリダイレクト時にページタイトルを一覧することができたので、メモしておきます。
こんな感じです。
素人丸出しの滅茶苦茶強引な方法ですが、とりあえず実現だけはうまくいきました。
まず「new.html.erb」は下記のような感じです。
form_for でフォームに入力した値を受け取ります。こちらは普通の記述かと思います。
<h2>Add New URL</h2>
<%= form_for :website, url: websites_path do |f| %>
<p>
<%= f.text_field :address, placeholder: 'URLを入力してください' %>
<% if @website.errors.messages[:address].any? %>
<span class="error">
<%= @website.errors.messages[:address][0] %>
</span>
<% end %>
</p>
<p>
<%= f.text_field :detail, placeholder: 'サイトの説明を入力してください' %>
</p>
<p>
<%= f.submit "登録する" %>
</p>
<% end %>
コントローラはこんな感じです。
こちらはひどいです。nokogiriでスクレイピングしてタイトルを取得するコードをコントローラのアクション内にまるまる記述しています。
ちゃんとスクレイピング用にrbファイルを作って呼び出すべきなんでしょうね。。
def create
@website = Website.new(params.require(:website).permit(:address, :detail))
if @website.saverequire 'nokogiri'
require 'open-uri'charset = nil
html = open(@website.address) do |f|
charset = f.charset
f.read
enddoc = Nokogiri::HTML.parse(html, nil, charset)
@website.title = doc.title
@website.saveredirect_to websites_path
else
render 'new'
end
end
参考にさせて頂いたのはこちらの記事です。
とりあえずメモでした!