2012-01-27 52 views
1

私はyoutubeビデオのための手強いルートを作っています。だから、人はちょうどフォームにYouTubeの埋め込みリンクを貼り付けます。Youtube埋め込みリンクがRailsに表示されない

class VideosController < ApplicationController 
    def index 
    @videos = Video.all 
    end 

    def new 
    @video = Video.new 
    end 

    def create 
    Video.create(params[:video]) 
    redirect_to :action => :index 
    end 

    def destroy 
    Video.destroy(params[:id]) 
    redirect_to :action => :index 
    end 
end 

そしてビューで、私はちょうどそれを表示しています:HAMLを使用していない1の場合(HAML中)

- @page_title = 'Video' 

#videos 
    %ul 
    = list_of(@videos) do |video| 
     %h1= video.title 
     != video.link 
     = link_to "Delete", video_path(video), :method => :delete 

    = link_to "Add new video", new_video_path 

    %p#top 
    = link_to 'Go to top ↑', '#' 

コントローラでは、私は、機知アクションの正常なセットを持っています、!=は文字列をエスケープします。 video.linkはYouTube埋め込みコードを保持します

問題は、新しい動画を作成してインデックスページに戻すと、新しく作成された動画が表示されないことです(他の動画は通常表示されます)。ページを更新した後にのみ、通常は表示されます。

ウェブ検査で、srcの属性がiframeにないことがわかりました(ビデオが表示されない理由です)。しかし、私がページソースを見ると、そこにはすべて正常です。だから、Javascriptの失敗かもしれないと思って、私はそれを無効にしようとしました。しかし何も変わっていない。

+0

あなたが書いた 'とビューで、私は」私はちょうどそれを表示しています。 " - しかし、それはすべてです...使用しているiframeまたはjavascriptウィジェットのビューコードを追加してください –

+0

ここでは、リダイレクトされたときに –

+0

を追加しました#indexに、タイトルやリンクを削除しますか?また、作成後にレコードを更新するバックグラウンド処理はありますか? –

答えて

1

私はあなたがHAML使用して、それをエスケープしたくないと思う...私はあなたが

video.link.html_safe 

注意を呼びたいと思う:ユーザーがリンクに貼り付けされている場合、これは非常に安全ではありません。

更新 ---あなたはjavascriptのコンソールオープンを開発している場合、このエラーがポップアップ表示されますが:

**Refused to execute a JavaScript script. Source code of script found within request.** 

チェックthis answer for why it's refusing to due XSSここでは、安全かつ作品でもある方法です。あなたは、テキストフィールドにユーチューブIDに貼ります:ibWYROwadYs

index.erb

<% if session[:youtube].present? %> 
    <iframe width="480" height="360" src="http://www.youtube.com/embed/<%=session[:youtube]%>" frameborder="0" allowfullscreen></iframe> 
<% end %> 

<%= form_tag load_path do %> 
    <%= text_field_tag :youtube_id %> 
    <%= submit_tag "Submit" %> 
<% end %> 

<%= link_to "Clear", clear_path, :method => :delete %> 

home_controller.rb

class HomeController < ApplicationController 
    def index 
    end 

    def smth 
    session[:youtube] = params[:youtube_id] 
    redirect_to :action => :index 
    end 

    def clear 
    session.clear 
    redirect_to :action => :index 
    end 
end 
+0

ありがとう、私はそれを念頭に置いておきます。私は管理者だけがこれにアクセスできるので、安全性については心配しませんでした。私はその人のためのウェブサイトを作っているので、私は基本的なCMSをやっています。 –

+1

動作しませんでした。申し訳ありませんが、私はあなたにそれを伝える必要があることを忘れていました。 –

+0

あなたは '= debug video.link'できますか?リンクがデータベースに保存されているかどうかを教えてくれます。 –

関連する問題