42

私のサイトでは、ユーザーが自分の個人的な外部 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 の前に設定する、エラーundefined method `website' for nil:NilClass が表示されます

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

KR、ファビアン

4

7 に答える 7

66

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

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

または、full_urlそのモデルに、欠落している場合に追加するメソッドを追加することもできます。

ちなみに、そのパーシャルは存在しないので使えません( or@micropostしかありません)。@micropostsmicropost

于 2013-05-23T19:21:22.987 に答える
24

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

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

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

于 2015-09-01T00:48:45.780 に答える
3

あなたはそのようなことをすることができます:

link_to micropost.website, url_for(micropost.website)

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

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

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

結果の文字列が表示されます。

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

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

于 2013-05-23T19:27:05.533 に答える
3

Ruby URI クラスを使用できます

= 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>
于 2016-10-03T22:25:06.207 に答える
0

私はRails 5で作業していますが、同じ問題がありました。それを修正するために必要なことは、link_toタグにプロトコルを含めることだけでした。たとえば、私は を持っていたwww.google.com.mxので、それは であるべきですhttp://www.google.com.mx。それだけで、公式ドキュメントに記載されているように問題なく動作します。

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

<%= 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" %>

それが他の誰かに役立つことを願っています。

于 2016-12-15T21:50:14.097 に答える
-2

これが私がしたことです。

@person がいて、彼がリンク (@person.link) を持っているとしましょう # => www.google.com

ヘルパーでこのようなものを作成します

def extlink(link)

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

終わり

そして、あなたのファイルでできること

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

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

<% end %>

私のために働く

于 2014-04-19T00:42:47.813 に答える