В целом это плохая идея построить 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 %>
(Можно, конечно, уменьшите приведенное выше до одного двухстрочного помощника за счет удобочитаемости и проверяемости, но это было бы ошибкой.)
Возможный дубликат [Как избежать # {из интерполяции строк] (http://stackoverflow.com/questions/1310701/how-do-i-escape-from-string-interpolation) –
@cantido Я видел, что ответ, и это немного другое. Я в основном хочу добавить дополнительный '#' до '# {article.title}, но, похоже, это не так. Мысли? – gitastic
Я понимаю, что вы имеете в виду. Я пробовал '' \ ## {article.title} "и работал в IRB, он работает для вас? –