Ссылка на YouTube для вставки не отображается в Rails - PullRequest
1 голос
/ 27 января 2012

Я делаю изобретательные маршруты для видео на YouTube.Таким образом, человек просто вставляет ссылку для вставки YouTube в форме.В контроллере у меня есть обычный набор находчивых действий:

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, я попытался отключить его.Но ничего не изменилось.

1 Ответ

1 голос
/ 28 января 2012

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

video.link.html_safe

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

Обновление --- Если у вас открыта консоль разработки javascript, вы увидите всплывающую ошибку:

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

Проверьте этот ответ, почему он отказывается из-за XSS Вот метод, который является одновременно безопасным и работает. Вы вставите идентификатор YouTube в текстовое поле: 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
...