Имам проблемче с rjs-а

  1. В приложението,което пиша имам един модел Problem и искам да направя страничка за промяна на problem. Идеята ми е следната: понеже можем да редактираме само съществуващи задачи, в началото зареждам всички тях в един select box и след като се натисне submit,с помощта на java script отдолу показвам текущите стойности на полетата. Обаче по необясними за мен причини вместо да се изпълни java script-а се изпечатва кода му. Ето кода на методите в контролера както и на rjs файла и rhtml файла:
    edit_problem.rhtml:

    <% form_remote_tag :url => {:action => :show_problem} do %>
      <% options = {}%>
      <% Problem.find(:all).each{|t| options[t.name] = t.problem_id}%>
      Select problem<%= select_tag :problem, options_for_select(options) %><br>
      <%= submit_tag "edit problem"%>
    <%end%>
    
    <div id ="problem">
    <%= render(:partial => 'problem',:object =>  @problem)%>
    </div>
    <%= link_to "back_to_index",:action =>:index%>
    
    show_problem:
    def show_problem
        @problem = Problem.find_by_problem_id(params[:problem])
    end
    show_problem.rjs:
    page.replace_html("problem",:partial => 'problem', :object => @problem)
    _problem.rhtml:
    <% unless problem.nil?%>
        <% form_for :problem,problem, :url => {:action => :do_edit,:id => problem.problem_id} do |f|%>
            Problem name:<%=f.text_field :name%><br>
            Time limit:<%= f.text_field :time_limit%><br>
            Letter:<%= f.text_field :letter%><br>
            Upload new tests: <%= file_field_tag :tests%>
            Upload new description: <%= file_field_tag :description%><%= select_tag :type,options_for_select(["doc","pdf"])%>
            <% submit_tag "Edit"%>
      <%end%>
    <%end%>

    А когато изпълня действията получавам ето това:
    try {
    Element.update("problem", "\n\n    \074form action=\"/spoj0_admin/do_edit/14\" method=\"post\"\076\n        Problem name:\074input id=\"problem_name\" name=\"problem[name]\" size=\"30\" type=\"text\" value=\"try\" /\076\074br\076\n        Time limit:\074input id=\"problem_time_limit\" name=\"problem[time_limit]\" size=\"30\" type=\"text\" value=\"3\" /\076\074br\076\n        Letter:\074input id=\"problem_letter\" name=\"problem[letter]\" size=\"30\" type=\"text\" value=\"TRTRT\" /\076\074br\076\n        Upload new tests: \074input id=\"tests\" name=\"tests\" type=\"file\" /\076\n        Upload new description: \074input id=\"description\" name=\"description\" type=\"file\" /\076\074select id=\"type\" name=\"type\"\076\074option value=\"doc\"\076doc\074/option\076\n\074option value=\"pdf\"\076pdf\074/option\076\074/select\076\n        \n  \074/form\076\n  \n");
    $("problem").fade();
    } catch (e) { alert('RJS error:\n\n' + e.toString()); alert('Element.update(\"problem\", \"\\n\\n    \\074form action=\\\"/spoj0_admin/do_edit/14\\\" method=\\\"post\\\"\\076\\n        Problem name:\\074input id=\\\"problem_name\\\" name=\\\"problem[name]\\\" size=\\\"30\\\" type=\\\"text\\\" value=\\\"try\\\" /\\076\\074br\\076\\n        Time limit:\\074input id=\\\"problem_time_limit\\\" name=\\\"problem[time_limit]\\\" size=\\\"30\\\" type=\\\"text\\\" value=\\\"3\\\" /\\076\\074br\\076\\n        Letter:\\074input id=\\\"problem_letter\\\" name=\\\"problem[letter]\\\" size=\\\"30\\\" type=\\\"text\\\" value=\\\"TRTRT\\\" /\\076\\074br\\076\\n        Upload new tests: \\074input id=\\\"tests\\\" name=\\\"tests\\\" type=\\\"file\\\" /\\076\\n        Upload new description: \\074input id=\\\"description\\\" name=\\\"description\\\" type=\\\"file\\\" /\\076\\074select id=\\\"type\\\" name=\\\"type\\\"\\076\\074option value=\\\"doc\\\"\\076doc\\074/option\\076\\n\\074option value=\\\"pdf\\\"\\076pdf\\074/option\\076\\074/select\\076\\n        \\n  \\074/form\\076\\n  \\n\");\n$(\"problem\").fade();'); throw e }

    Публикувано преди повече от 4 години
  2. Открих си грешката: бях забравил да добавя следния ред в header-а на layout-а:
    <%= javascript_include_tag :defaults %>

    Публикувано преди повече от 4 години

Нов отговор

Трябва да сте вътре за да отговаряте.