2012-01-27 7 views
1

Я делаю находчивые маршруты для видео youtube. Таким образом, человек просто вставляет ссылку на встраивание youtube в форму. В контроллере у меня есть нормальный набор изобретательных действий:Youtube embed link не отображается в 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)

- @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 ↑', '#' 

Для того, кто не используют Haml , != ускользает от строки. video.link содержит код для встраивания YouTube

Проблема в том, что при создании нового видео и при перенаправлении меня обратно на индексную страницу вновь созданное видео не отображается (другие обычно отображаются). Только после обновления страницы она обычно отображается.

Я видел в веб-инспекторе, что атрибут src отсутствует в iframe (так вот почему видео не отображается). Но когда я смотрю в источник страницы, там все нормально. Итак, думая, что это может быть ошибка Javascript, я попытался отключить его. Но ничего не изменилось.

+0

Вы писали 'А в представлении I» m, просто отображая его. '- но это все ... пожалуйста, добавьте код представления для виджета iframe или javascript, который вы используете. –

+0

Здесь я добавил его –

+0

, когда вы перенаправляетесь на #index, отображается ли название и/или удаление ссылки? Кроме того, есть ли какая-либо фоновая обработка, которая принимает обновления записи после ее создания? –

ответ

1

Я не думаю, что вы хотите, чтобы избежать его, используя Haml ... Я думаю, что вы хотите назвать

video.link.html_safe 

Примечание: если пользователь вставив в ссылке, это очень опасно.

Update --- Если у вас есть Java-разработки консоль открыта, вы увидите, что это ошибка выскочит:

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

Проверить this answer for why it's refusing to due XSS Вот метод, который является безопасным и работает. Вы вставить в YouTube 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' ?? который скажет вам, сохраняется ли ссылка в базе данных или нет. –