1

YouTube URL の YouTube 埋め込みリンク バージョンをデータベースに保存したいと思います。ユーザーが貼り付けたリンクを埋め込みバージョンに変換するのに役立つヘルパーがあります。

とにかく、保存する前に変換してから、変換された値をモデルに渡して保存したいと思います。変換を行うヘルパー メソッドにリンク パラメータを渡すために使用するメソッドをコントローラに作成しました。

とにかくこれは効果がありません。テキスト ボックスに貼り付けた元のリンクが保存されます。before_save と self.link を使用してモデルでこれを実行しようとしましたが、どちらも機能しません。以下は私の現在のコードです。

形:

= form_for @micropost, :remote => true do |f|
  = f.text_field :link, :class => "addLinkField"
  = f.submit

貼り付けたリンクを変換するためのヘルパー:

module OgpObjectsHelper
  def video_embed(video_url)
    if video_url[/(https?):\/\/(www.)?(youtube\.com\/watch\?v=|youtu\.be\|youtube\.com\/watch\?feature=player_embedded&v=)([A-Za-z0-9_-]*)(\&\S+)?(\S)*/]youtube_id = $4
      "http://www.youtube.com/embed/#{ youtube_id }"
  end
end

コントローラ:

class MicropostsController < ApplicationController
  include OgpObjectsHelper

  before_filter :convert_video_link

  def create
    @micropost = current_user.microposts.build(params[:micropost])
        respond_to do |format|
            if @micropost.save
              format.html { render :partial => '/users/partials/micropost'} 
            end
        end
  end

  def convert_video_link
    video_embed(params[:micropost][:link])
  end

end

最善のアプローチソリューションをありがとうございます。

敬具

4

3 に答える 3

1

それを Micropost モデルに入れ、YouTube 形式と一致しない場合は cos を検証することを忘れないでください。リンクは nil になります。

# micropost.rb 
include OgpObjectsHelper

before_validate :convert_video_link

protected 
def convert_video_link
  self.link = video_embed(link)
end
于 2012-05-28T13:58:46.623 に答える
1

問題はヘルパーにあります。link属性を正規表現の 4 番目の後方参照に設定しようとしていますが、実際には値を割り当てていません。フィルターはリンクを返すだけで、モデルの属性をそのリンクに設定しません。私の提案は、これをモデルの before_save に移動することです。次のテストされていないコードでそれを行う必要があります。

class Micropost

before_save :convert_video_url

def convert_video_url
  url = self.link
  youtube_id = url.scan(/(https?):\/\/(www.)?(youtube\.com\/watch\?v=|youtu\.be\|youtube\.com\/watch\?feature=player_embedded&v=)([A-Za-z0-9_-]*)(\&\S+)?(\S)*/)[0][3]
  self.link = "http://www.youtube.com/embed/#{ youtube_id }"
end

YouTube が URL の形式を変更すると、正規表現が壊れることに注意してください。

ロビン

于 2012-05-28T14:06:17.090 に答える
1

convert_video_link上記のコードでは、メソッドを次のように変更する必要があります。

params[:micropost][:link] = video_embed(params[:micropost][:link])

あなたはまだparam値からレコードを作成しているので。現状のメソッドは、これらのパラメーターを変更しません。

于 2012-05-28T13:55:37.103 に答える