Rails — можно ли использовать ruby-код в файлах RJS?

Можно ли использовать ruby-код в файлах RJS?

Например, файл destroy.js.rjs

if @template == "viewer"
  page["viewing_registry_#{@viewer_registry.id}"].replace_html :partial => "shared/request_viewer_link" 
else
  page["viewer_#{@viewer.id}"].visual_effect :DropOut, :duration => 2.0
  flash.discard
end

Это файл RJS, вызываемый из действия уничтожения, которое имеет

  def destroy
    @viewer = Viewer.find(params[:id])
    @viewer_registry = Registry.find(@viewer.registry_id)
    @viewer.destroy
    flash[:notice] = "Viewer deleted"
    @template = params[:template]
    params[:template] = nil
    respond_to do |format|
      format.html { redirect_to registry_path(@viewer_registry) }
      format.js
    end
  end

Таким образом, при вызове AJAX файл RJS используется для ответа, и он дает другой ответ в зависимости от того, какой шаблон вызывает действие уничтожения.

В данный момент выполняется вызов AJAX, запись уничтожается, а дальше ничего не происходит, вне зависимости от того, какой шаблон вызывал действие уничтожения. Поэтому мне интересно, не работает ли он просто потому, что я не могу использовать рубиновый код в файле RJS. Любые идеи? Или я делаю все неправильно?

Спасибо!


person Jty.tan    schedule 10.07.2010    source источник


Ответы (1)


Правильно, я переделал функцию уничтожения, чтобы она выглядела так:

  def destroy
    #is this bad because its not linked to current_user?
    #how would you even set it to be relational to current_user? 
    @viewer = Viewer.find(params[:id])
    @viewer_registry = Registry.find(@viewer.registry_id)
    @viewer.destroy
    flash[:notice] = "Viewer deleted"
    respond_to do |format|
      format.html { redirect_to registry_path(@viewer_registry) }
      format.js {
        if params[:template] == "viewer"
          render :action => "viewer_destroy.js.rjs"
        else
          render :action => "destroy.js.rjs"
        end
      }
    end
  end

Поэтому вместо этого у меня есть 2 файла RJS, и разные используются в зависимости от имени входящего шаблона. Ура!

person Jty.tan    schedule 16.07.2010