2015-11-17 6 views
2

Я пытаюсь включить ссылку на якорь статьи в долевой ссылке Twitter динамически с Rails link_to метод:побег # в Rails link_to, Twitter Поделиться ссылкой

<%= link_to "http://twitter.com/home?status=Check Out #{article.title} link.com/#{article.title.parameterize}" do %> 
    <span class="fa fa-twitter-square fa-2x"></span> 
<% end %> 

Твиттера выводит контент Поделиться ссылкой на:

ОТКРОЙТЕ НАЗВАНИЕ СТАТЬИ link.com/ARTICLE-TITLE.

Дело в том, что я хочу добавить символ # перед ARTICLE-TITLE, поскольку это якорная ссылка на мой взгляд. Я просто не могу заставить # сбежать должным образом. Возможно ли это?

+0

Возможный дубликат [Как избежать # {из интерполяции строк] (http://stackoverflow.com/questions/1310701/how-do-i-escape-from-string-interpolation) –

+0

@cantido Я видел, что ответ, и это немного другое. Я в основном хочу добавить дополнительный '#' до '# {article.title}, но, похоже, это не так. Мысли? – gitastic

+0

Я понимаю, что вы имеете в виду. Я пробовал '' \ ## {article.title} "и работал в IRB, он работает для вас? –

ответ

0

% 23 = # (в ссылке на Twitter).

ex. link.com/%23#{article.title.parameterize}

Похоже, он отображается как хэштегом (#thattookwaytoolongtofigureout #ihopethishelpssomeone)

+0

Я могу подтвердить, что Chrome заменяет этот символ регулярным хэштегом, когда он находится в строке URL. –

0

В целом это плохая идея построить URL-адреса со строкой concatenation- особенно, когда вам нужно сделать что-то вроде размещения URL-адреса в параметре запроса другого URL-адреса.

Чтобы создать правильно запрограммированные параметры запроса, используйте метод Rails Hash#to_query.

Давайте возьмем его изнутри.

# Build the article URL 
article_base_url = 'http://example.com/path' 
article_url_hash = article.title.parameterize # => "my-article" 
article_url = "#{article_base_url}##{article_url_hash}" 
# => "http://example.com/path#my-article" 

# Next, build the query string for the tweet URL 
tweet_url_query = { 
    status: "Check out #{article.title} #{article_url}" 
}.to_query 
# => "status=Check%20out%20My%20Article%20http%3A%2F%2Fexample.com%2Fpath%23my-article" 

# Finally, build the tweet URL: 
base_tweet_url = 'https://twitter.com/home' 
tweet_url = "#{base_tweet_url}?#{tweet_url_query}" 
# => "https://twitter.com/home?status=Check%20out%20My%20Article%20http%3A%2F%2Fexample.com%2Fpath%23my-article" 
<%= link_to tweet_url do %> 
    <span class="fa fa-twitter-square fa-2x"></span> 
<% end %> 

Как, возможно, вы уже догадались, это, вероятно, лучше, чтобы положить все это в качестве помощника:

ARTICLE_BASE_URL = 'http://example.com/' 
TWEET_BASE_URL = 'http://twitter.com/home' 

def tweet_url(title) 
    query = { status: tweet_text(title) }.to_query 
    "#{TWEET_BASE_URL}?#{query}" 
end 

def tweet_text(title) 
    "Check out #{title} #{article_url(title)}" 
end 

def article_url(title) 
    "#{ARTICLE_BASE_URL}##{title.parameterize}" 
end 
<%= link_to tweet_url(article.title) do %> 
    <span class="fa fa-twitter-square fa-2x"></span> 
<% end %> 

(Можно, конечно, уменьшите приведенное выше до одного двухстрочного помощника за счет удобочитаемости и проверяемости, но это было бы ошибкой.)