0

我正在制作一个电子学习平台并拥有一个课程资源,因此我可以动态添加课程。我现在正处于需要将视频上传到每门课程的阶段,我决定为此使用 wistia。

我不确定的是如何直接通过课程表单嵌入属于每门课程的视频?我找不到有关如何实现此目的的文档,因此我们将不胜感激。

例子:-

我有这个来自 wistia 的嵌入代码:

<iframe src="//fast.wistia.net/embed/iframe/tk6picrt4k" allowtransparency="true" frameborder="0" scrolling="no" class="wistia_embed" name="wistia_embed" allowfullscreen mozallowfullscreen webkitallowfullscreen oallowfullscreen msallowfullscreen width="640" height="388"></iframe>
<script src="//fast.wistia.net/assets/external/E-v1.js" async></script>

一旦我:video_url在数据库中创建了一个表,如果我将上面的代码粘贴到 Create Course 操作中的表单框中并提交表单,我该如何让其按预期工作?和 :video_url 应该是什么数据类型?

课程控制器:-

class CoursesController < ApplicationController
  before_action :set_course, only: [:show, :edit, :update, :destroy]
  before_action :set_grade
  respond_to :html


  def index
   @grades = Grade.all
   @courses = Course.where grade: params[:grade_id]
   respond_with(@course)
  end


  def show
   respond_with(@course)
  end


  def new
    @grade = Grade.find(params[:grade_id])
    @course = @grade.courses.new
    respond_with(@course)
  end


  def edit

  end


  def create
    @grade = Grade.find(params[:grade_id])
    @course = @grade.courses.build(course_params)
    if @course.save
      redirect_to grade_courses_path(@grade, @courses), notice: 'Successfully Created Course'
    else
      render action: 'new'
    end
  end


  def update
    @course.update(course_params)
    redirect_to grade_courses_path(@grade, @courses), :notice => "Successfully Updated Course"
  end


  def destroy
    @course.destroy
    redirect_to grade_courses_path(@grade, @courses), :notice => "Successfully Deleted Course"
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_course
      @course = Course.find(params[:id])
    end

    def set_grade
      @grade = Grade.find(params[:grade_id])
    end 

    # Never trust parameters from the scary internet, only allow the white list through.
    def course_params
      params.require(:course).permit(:title, :period, :description, :semester, :grade, :subject, :grade_id, :chapters_from, :chapters_to, :instructor, :price)
    end
end

_form.html.erb

<%= bootstrap_form_for [@grade, @course] do |f| %>
  <% if @course.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@course.errors.count, "error") %> prohibited this course from being saved:</h2>

      <ul>
      <% @course.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.select :subject, [["Math"], ["Physics"], ["Chemistry"], ["Science"], ["Biology"], ["English"], ["Arabic"], ["Social Studies"]], { label: "Subject"}, { class: "selectpicker" } %>
  </div>
  <div class="field">
    <%= f.text_field :instructor %>
  </div>
  <div class="field">
    <%= f.select :period, [["First"], ["Second"], ["Third"], ["Final"]], { label: "Period"}, { class: "selectpicker" } %>
  </div>
  <div class="field">
    <%= f.text_area :description %>
  </div>
  <div class="field">
    <%= f.select :semester, [["First"], ["Second"]], { label: "Semester"}, { class: "selectpicker" } %>
  </div>
  <div class="field">
    <%= f.number_field :chapters_from %>
  </div>
  <div class="field">
    <%= f.number_field :chapters_to %>
  </div>
  <div class="field">
    <%= f.number_field :price %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
4

1 回答 1

1

在您的控制器内部,我们必须允许设置新属性video_url。Rails 将自行处理更新/创建:

# Never trust parameters from the scary internet, only allow the white list through.
def course_params
  params.require(:course).permit(:title, :period, :description, :semester, :grade, :subject, :grade_id, :chapters_from, :chapters_to, :instructor, :price, :video_url)
end

在您拥有静态 iframe 的视图中:

...
<iframe src="#{@course.video_url}" allowtransparency="true" frameborder="0" scrolling="no" class="wistia_embed" name="wistia_embed" allowfullscreen mozallowfullscreen webkitallowfullscreen oallowfullscreen msallowfullscreen width="640" height="388"></iframe>
...

这将使用给定的video_url. 请注意,如果 video_url 为NIL.

video_url应该是 datatype :string。这对于一个简单的 URL 来说已经足够了 :)

考虑到您已经有一个表单来为您的课程提交数据(要使用信息创建、编辑、更新课程),您只需input field为 URL ( video_url) 添加另一个表单。


现在您提供了表单,我们可以添加另一个输入:

<%= bootstrap_form_for [@grade, @course] do |f| %>
  <% if @course.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@course.errors.count, "error") %> prohibited this course from being saved:</h2>

      <ul>
      <% @course.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.select :subject, [["Math"], ["Physics"], ["Chemistry"], ["Science"], ["Biology"], ["English"], ["Arabic"], ["Social Studies"]], { label: "Subject"}, { class: "selectpicker" } %>
  </div>
  <div class="field">
    <%= f.text_field :instructor %>
  </div>
  <div class="field">
    <%= f.select :period, [["First"], ["Second"], ["Third"], ["Final"]], { label: "Period"}, { class: "selectpicker" } %>
  </div>
  <div class="field">
    <%= f.text_area :description %>
  </div>
  <div class="field">
    <%= f.select :semester, [["First"], ["Second"]], { label: "Semester"}, { class: "selectpicker" } %>
  </div>
  <div class="field">
    <%= f.number_field :chapters_from %>
  </div>
  <div class="field">
    <%= f.number_field :chapters_to %>
  </div>
  <div class="field">
    <%= f.number_field :price %>
  </div>
  <div class="field">
    <%= f.text_field :video_url %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

应该是这样!


如果您已经有一个表单以及一个现有的控制器,请向我们提供更多代码,我很乐意编辑我的答案,为您提供更具体的输入。

到目前为止,这应该足以让您使用:)

--- 如果您还需要其他东西,请告诉我们。

于 2015-12-16T10:21:31.143 回答