2014-11-20 2 views
0

Я пытаюсь выяснить способ извлечения URI/URL из содержимого в моем представлении; в Rails.Как извлечь URI из контекста в Rails

Пока все работает, но с глюками, и я думаю, потому что исходный код - это не чистый URI, а скорее тот, у которого есть дополнительные вещи. Пока, на мой взгляд, у меня есть следующее;

<div id="social" class="facebook" data-url="<%= URI.extract(saved.content) %>"> 

Теперь, когда жить выше работает, но как я уже говорил с глюк, потому что Facebook иногда поднимает URL, а иногда нет. С приведенной выше строкой; Я получаю следующие исходные коды;

<div id="social" class="facebook" data-url="[&quot;dealbook:&quot;, &quot;http://t.co/mUQOmLlLXG&quot;]"> 

saved.content есть сообщение, которое иногда может иметь URL в нем;

Есть ли способ очистить это? так что получить его легче. Это будет удивительным, если URI/URL только распечатаны в data-url="", а не кавычки, скобки, и т.д ..

ответ

1

Вы, вероятно, хотите что-то вроде этого:

data-url="<%= URI.extract(saved.content).detect {|u| u.start_with? "http" } %>" 

Причина заключается в том, что URI#extract возвращает массив Матчи; вы можете использовать Enumerable#detect, чтобы найти первый, который соответствует блоку, который в этом случае является условием, что URL-адрес начинается с «http».

+0

есть способ сделать это, обнаружив как http, так и https, на всякий случай :) Если я прав, например '{| u | u.start_with? "http" || «https»} 'будет работать? – user2419316

+0

Я предполагаю, что это действительно не нужно, поскольку http в части обнаружения также будет соответствовать https или httpy или что-то еще. – user2419316

0
# in saved model 
def content_url 
    s = self.content.gsub(/&[0-9a-z]+;/i, ' ') # replace &xxx;(html symbol) with ' ' string 
    URI.extract(s, ['http', 'https']).first 
end 

#in view 
<div id="social" class="facebook" data-url="<%= saved.content_url%>"> 

В сохраненной модели определите метод #content_url для извлечения url.

+1

Только для кода ответы автоматически помечены как низкое качество и, как таковые, обескуражены в stackoverflow. В будущем, пожалуйста, приучите свой ответ к деталям и объясните, почему это решение вопроса. Это помогает другим пользователям. –

+0

@yxf любая причина, почему вы положили это в модель? не следует ли это входить в контроллер, и нужно ли идти так глубоко, чтобы просто оставить его во взглядах? – user2419316

+0

@ user2419316 #content - это модельный доступ, #content_url используется для извлечения URL из содержимого. если вы определили #content_url в контроллере? где? helper_method ?. Я думаю, лучше всего определить в модели. И определенная модель сохраняет код чистым. – yxf

Смежные вопросы