سؤال

ومهلا، أنا فقط بدأت في تعلم روبي / القضبان. في هذه اللحظة، وأنا أحاول أن تفعل مثال من كتاب الألمانية "Praxiswissen روبي على القضبان"، والتي هي قديمة جدا ومكتوبة لروبي على القضبان 1. على أي حال، وأنا حاولت أن تفعل الأمثلة مع القضبان 2. الآن وقد أتيحت لي مشكلة لأكثر من أسبوع.

وجاء في كتاب (القضبان 1) لا بد لي من الكتابة في وحدة التحكم الخاصة بي:

<اقتباس فقرة>   

وpage.replace_html (       "broadcast_search_result،       : جزئية => 'broadcast_search_result،       : جمع =>videos [سلع ']   )؛

ولقد وجدت أن هذا في القضبان 2 هو مكتوب على غرار ما يلي:

<اقتباس فقرة>   

وitems = محاولة (videos [: المواد])

     

وpage.replace_html (             "broadcast_search_results،             : جزئية =>items           )

ولكن الخادم يلقي الرسالة التالية:

<اقتباس فقرة>   

وActionView :: MissingTemplate (قالب مفقود علامات الرقم / _hash.erb في التطبيق عرض مسار / مشاهدات):

     

والتطبيق / وحدات التحكم / stations_controller.rb: 46: في `__instance_exec0 '

     

والتطبيق / وحدات التحكم / stations_controller.rb: 30: في `search_broadcasts '

وأود أن إنشاء تجزئات قالب / _hash.erb بدلا من المحطات / _item.erb. أي شخص يمكن أن تساعد لي، من فضلك؟

وشكرا جزيلا لك!


وOK، سأضيف رمز تحكم: stations_controller.rb:

class StationsController < ApplicationController
  # GET /stations
  # GET /stations.xml
  def index
    @stations = Station.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @stations }
    end
  end

  #GET /stations/search_broadcasts
  def search_broadcasts
    @search = params[:broadcast_search][:search]
    @channel = params[:broadcast_search][:channel]
    if params[:broadcast_search][:current_page]
      @current_page = params[:broadcast_search][:current_page].to_i
    else
      @current_page = 1
    end

    @videos = Broadcast.get_videos(
      @search,
      @channel,
      2,
      @current_page
    )

    render(:update) { |page|
      if @videos[:http_code] == 200
        page.replace_html(
          'broadcast_search_results_count',
          :inline => "<p>Es wurden <b><%= @videos[:count] %></b> Sendung<%= 'en' unless @videos[:count] == 1 %> gefunden</p>"
        )
      else
        page.replace_html(
          'broadcast_search_results_count',
          :inline => "<p>Es trat ein Fehler bei der Daten&uuml;bertragung auf.</p>"
        )
      end

      if @videos[:count] > 0
        logger.debug "The object is #{@videos[:items]}"
        @items = @videos[:items]
        page.replace_html(
          'broadcast_search_results',
          :partial => @items
        )
        page.replace_html(
          'broadcast_search_results_navigation',
          :partial => 'broadcast_search_results_navigation',
          :locals => {
            :videos => @videos,
            :search => @search,
            :channel => @channel,
            :current_page => @current_page
          }
        )
        page.show('broadcast_search_results')
        page.show('broadcast_search_results_navigation')
        #page.visual_effect(
        #  :highlight,
        #  'bradcast_search_results'
        #)
      else
        #page.hide('broadcast_search_results')
        #page.hide('broadcast_search_results_navigation')
      end
    }
  end

  # GET /stations/1
  # GET /stations/1.xml
  def show
    @station = Station.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @station }
    end
  end

  # GET /stations/new
  # GET /stations/new.xml
  def new
    @station = Station.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @station }
    end
  end

  # GET /stations/1/edit
  def edit
    @station = Station.find(params[:id])
  end

  # POST /stations
  # POST /stations.xml
  def create
    @station = Station.new(params[:station])

    respond_to do |format|
      if @station.save
        flash[:notice] = 'Station was successfully created.'
        format.html { redirect_to(@station) }
        format.xml  { render :xml => @station, :status => :created, :location => @station }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @station.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /stations/1
  # PUT /stations/1.xml
  def update
    @station = Station.find(params[:id])

    respond_to do |format|
      if @station.update_attributes(params[:station])
        flash[:notice] = 'Station was successfully updated.'
        format.html { redirect_to(@station) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @station.errors, :status => :unprocessable_entity }
      end
    end
  end

  # DELETE /stations/1
  # DELETE /stations/1.xml
  def destroy
    @station = Station.find(params[:id])
    @station.destroy

    respond_to do |format|
      format.html { redirect_to(stations_url) }
      format.xml  { head :ok }
    end
  end
end

ووbroadcast.rb نموذج (لBroadcast.get_videos):

require('net/http')
require('uri')
require('xmlsimple')

class Broadcast < ActiveRecord::Base
  belongs_to :station

  AOL_API_URL = 'http://xml.truveo.com/apiv3'
  AOL_DEVELOPER_ID = '12345667myid'

  def self.channels
    return[
      '[Alle Quellen]',
      'YouTube',
      'MYSPACE',
      'Dailymotion',
      'Google Video',
      'IFILM',
      'Veoh'
    ]
  end

  def self.get_videos(search, channel, per_page, page)

    channels = '' if channel == '[Alle Quellen]'

    url = AOL_API_URL +
      "?method=truveo.videos.getVideos" +
      "&query=" + URI.escape("#{search} type:free format:flash channel:\"#{channel}\"") +
      "&results=#{per_page.to_i}" +
      "&start=#{(page.to_i) * per_page.to_i}" +
      "&appid=#{AOL_DEVELOPER_ID}"
    data = Broadcast.get_xml(url)

    if data[:http_code] == 200
      data[:page_count] = data[:count] / per_page
      data[:page_count] += 1 if data[:count] % per_page > 0
    end

    return data
  end

  def self.get_video(video_id)
    url = AOL_API_URL +
    "?method=truveo.videos.getVideos" +
    "&query=" + URI.escape('id:' + video_id.to_s) +
    "&appid=#{AOL_DEVELOPER_ID}"
    data = Broadcast.get_xml(url)

    video = data[:items][0]
    video[:http_code] = data[:http_code]
    return video
  end

  def self.get_xml(url)

    # Data-Objekt initialisieren
    data = Hash.new
    data[:count] = 0
    data[:items] = Array.new
    data[:url] = url

    # XML-Daten holen
    xml = Net::HTTP.get_response(URI.parse(url))

    # HTTP-Response-Code ŸberprŸfen
    data[:http_code] = xml.code.to_i
    return data unless data[:http_code] == 200

    # XML Parsen
    xml_obj = XmlSimple.xml_in(xml.body.to_s)
    data[:count] = xml_obj['VideoSet'][0]['totalResultsAvailable'][0].to_i
    return data if data[:count] == 0

    # Informationen auslesen
    xml_obj['VideoSet'][0]['Video'].each { |xml_video|
      new_video = Hash.new
      new_video[:video_id] = xml_video['id'][0].to_s
      new_video[:title] = xml_video['title'][0].to_s
      new_video[:source_url] = xml_video['videoUrl'][0].to_s
      new_video[:thumbnail_url] = xml_video['thumbnailUrl'][0].to_s
      new_video[:description] = (xml_video['description'][0].to_s) if xml_video['description']
      new_video[:video_html] = (xml_video['videoPlayerEmbedTag'][0].to_s) if xml_video['videoPlayerEmbedTag']
      data[:items] << new_video
    }

    return data

 end

end
هل كانت مفيدة؟

المحلول

ويبدو أن المشكلة التي تواجهها هي أنه عندما يحاول القضبان لتقديم جزئية لكائن، فإنه سيتم الافتراضي إلى استخدام اسم الفئة التي الكائن كاسم الجزئي. كل بند على حدة في بيانات [: المواد] هو تجزئة، وذلك في وقت ما كنت تحاول تقديم واحدة من تلك العناصر والقضبان تبحث عن قالب _hash.html.erb. أعتقد أنك تريد تغيير التعليمات البرمجية التالية:

page.replace_html(
  'broadcast_search_results',
  :partial => @items
)

إلى:

page.replace_html(
  'broadcast_search_results',
  :partial => 'item',
  :collection => @items
)

وهذا من شأنه أن يجعل _item.html.erb جزئية لكل عنصر فيitems.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top