web-dev-qa-db-ja.com

変数link_toを外部URLに定義する方法

私のサイトでは、ユーザーは個人の外部Webサイトへのリンクを含む個人プロファイルを持っています。 websiteという名前でpostgresqlデータベースに保存するサイトのURL。結果をテストすると、常に次のようなURLが表示されます。

http://localhost:3000/www.example.com

の代わりに http://www.example.com

私の見解index.html.erbは次のようになります。

<% provide(:title, 'All projects') %>
<h1>All projects</h1>

<%= will_paginate %>

<ul class="microposts">
    <%= render @microposts %>
</ul>

<%= will_paginate %>

そして、私の_ micropost.html.erbこのように:

<li>
    <span class="title"><%= micropost.title %></span>
    <span class="website"><%= link_to micropost.website, micropost.website %></span>
    <span class="content"><%= micropost.content %></span>
    <span class="timestamp">
        Posted <%= time_ago_in_words(micropost.created_at) %> ago.
    </span>
</li>

この場合、何が問題なのかわかりません。 micropost.websiteの前に@を設定すると、エラーが発生しますnil:NilClassの未定義メソッド `website '

誰も私を助けることができますか(私はRoR初心者です)?

KR、ファビアン

32
Fawyd

http://なしでURLを保存しているように思われるので、相対URLとして解釈されています。次のようなことをするだけです。

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

または、モデルにfull_urlメソッドを追加して、見つからない場合に追加します。

ところで、そのパーシャルには@micropostは存在しないため使用できません(@micropostsまたはmicropostしかありません)。

61
Goro

以下のコードで試すことができます:

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

これにより、新しいタブで開くリンクが作成されます。

19
Dimang Chou

次のようなことができます:

link_to micropost.website, url_for(micropost.website)

Rails Api:url_for を参照してください

Rails consoleで実験できます。コンソールを入力するだけです:

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

そして、結果の文字列が表示されます。

また、パスヘルパーとURLヘルパーの違いを学ぶ必要があります。 Ruby on Rails guide。 を参照してください。

五郎の権利。 Webサイト属性に「http://」を追加する必要があります。検証後、モデルインスタンスをデータベースに保存する前に、このプレフィックスを追加する必要があります。

3
s.vatagin

Ruby RI 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>
2
Eric Norcross

私はRails 5で作業していますが、同じ問題がありました。それを修正するために必要なことは、プロトコルをlink_to 鬼ごっこ。例えば。私はwww.google.com.mx、その後、http://www.google.com.mx。そして、それは official doc が言及されているように、それがうまく動作するということです。

だから、最終的に私は私の意見でこのようなものを持っています:

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

これは次と同じです:

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

他の人の助けになることを願っています。

0
Alex Ventura

postrank-uri gemを使用して、link_toに渡す前にURLを正規化します。

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

次に、ビューでlink_to "website", user.normalized_webpage, target: "_blank"を使用できます。これにより、たとえば、http://がURLに追加されます(見つからない場合)。

0
Oleander