私のサイトでは、ユーザーは個人の外部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、ファビアン
http://
なしでURLを保存しているように思われるので、相対URLとして解釈されています。次のようなことをするだけです。
link_to micropost.website, "http://#{micropost.website}"
または、モデルにfull_url
メソッドを追加して、見つからない場合に追加します。
ところで、そのパーシャルには@micropost
は存在しないため使用できません(@microposts
またはmicropost
しかありません)。
以下のコードで試すことができます:
<%= link_to "your label", "your link with http", :target => "_blank" %>
これにより、新しいタブで開くリンクが作成されます。
次のようなことができます:
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://」を追加する必要があります。検証後、モデルインスタンスをデータベースに保存する前に、このプレフィックスを追加する必要があります。
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>
私は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" %>
他の人の助けになることを願っています。
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に追加されます(見つからない場合)。