How do I defined a variable link_to to an external URL

こ雲淡風輕ζ 提交于 2019-11-28 08:03:33
Goro

It sounds like you are storing URLs without the http:// so they are being interpreted as relative URLs. You just need to do something like this:

link_to micropost.website, "http://#{micropost.website}"

or maybe add a full_url method to that model that adds it if it's missing.

By the way, you can't use @micropost in that partial because it doesn't exist (you only have @microposts or micropost).

Dimang Chou

You can try with this below code:

<%= link_to "your label", "your link with http", :target => "_blank" %>

This will create a link that opens in a new tab.

You can do something like that:

link_to micropost.website, url_for(micropost.website)

See Rails Api: url_for

You can experiment in rails console. Just type in console:

micropost = Micropost.first
helper.link_to micropost.website, url_for(micropost.website)

And you see a result string.

Also you need to learn the difference between path and url helpers. See ruby on rails guide.

Goro rights. You need to add "http://" to your website attribute. After validating and before save Model instance to database you need to add this prefix.

You can use the ruby URI class

= link_to micropost.website, URI::HTTP.build({:host => micropost.website}).to_s, target: "_blank"

# <a target="_blank" href="http://www.example.com">www.example.com</a>

I use the postrank-uri gem to normalize the url before passing it to link_to.

class User < ActiveRecord::Base
  def normalized_webpage
    webpage && PostRank::URI.normalize(webpage).to_s
  end
end

Then you can use link_to "website", user.normalized_webpage, target: "_blank" in your view. This will for example add the http:// to the url, if it's missing.

I'm working with Rails 5 and I had the same problem. All I need to do to fix it, was to include the protocol on my link_to tag. E.g. I had www.google.com.mx, then, it should be http://www.google.com.mx. And that's it it works just fine like in the official doc is mentioned.

So, finally I just have something like this in my view:

<%= link_to (content_tag(:i, "help", class: 'material-icons tiny')), " http://www.google.com.mx", target: "_blank", rel: "alternate" %>

Which is the same as:

<%= link_to "help", "http://www.google.com.mx", target: "_blank", rel: "alternate" %>

I hope it helps somebody else.

Here's what i did.

Let's say we have @person and he has a link (@person.link) # => www.google.com

in your helpers create something like this

def extlink(link)

 if link.include?("http://")
  puts link
 else
  link.insert(0, "http://")
  link
 end

end

And in your file you can do

<% @person.each do |p| %>

<%= link_to 'External', extlink(p.link) %>

<% end %>

Works for me

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!