【问题标题】:Processing by xController#show / update as HTML instead as JSxController#show 处理/更新为 HTML 而不是 JS
【发布时间】:2014-01-01 02:47:50
【问题描述】:

我的数据库中有一个表,我正在页面中显示。

问题发生在我保存更改时。

我需要使用 js 的 Rails 进程,并且当您单击保存时不会将用户重定向到另一个页面。

到目前为止,我可以保存更改,但我总是被重定向到由 HTML 而不是 JS 处理的其他页面。

控制器

filter_resource_access :nested_in => :releases
filter_resource_access :nested_in => :project

respond_to :js, only: [:update, :edit, :show]
respond_to :html

before_filter :load_issue, :load_project, :load_release

def edit
end

def update
  if @issue_value.update_attributes(params[:issue_value])
    flash.now[:notice] = t('messages.successfully_updated_entity.f',
                                             :entity => IssueValue.model_name.human)
    respond_to do |format|
      format.js
    end
  end
end

_issue_values_table

<table class="zebra-striped">

 <thead>
 <tr>
   <th><%= IssueValue.human_attribute_name :name %></th>
   <th><%= IssueValue.human_attribute_name :value %></th>
   <th><%= IssueValue.human_attribute_name :client_value %></th>
   <th></th>
</tr>
</thead>
<tbody>
<% @issue_types = IssueType %>
<% for issue_value in @release.issue_values.order("issue_type_id") %>
  <%= content_tag_for :tr, issue_value, :class => "clickable" do %>
    <td width="42%"><%#= t(@issue_types.find(issue_value.issue_type_id).label_key) %></td>
    <td width="20%">
      <%= number_to_currency issue_value.value %>
    </td>
    <td width="20%">
      <%= number_to_currency issue_value.client_value %>
    </td>
    <td width="12%" class="icons right">
      <%= edit_icon issue_value, [:edit, @project, @release, issue_value], :remote => true, 'data-default-action' => true %>
    </td>
   <% end %>
<% end %>
</tbody>

_form_row

 <td colspan="4">
   <%= form_for [@project, @release, @issue_value], :remote => true, :html => {:style => "margin:0"} do |f| %>
  <table class="basic">
    <tr>
      <td class="span8 middle">
        <div class="clearfix">
          <%#= f.text_field :name, :placeholder => IssueType.human_attribute_name(:name),
                           :autofocus => true, :class => "span10" %>
        </div>
      </td>
      <td class="span5 middle">
        <div class="clearfix">
          <%= f.text_field :value, :placeholder => IssueValue.human_attribute_name(:value),
                   :autofocus => true, :class => "span2" %>
        </div>
      </td>
      <td class="span5 middle">
        <div class="clearfix">
          <%= f.text_field :client_value, :placeholder => IssueValue.human_attribute_name(:client_value),
                   :class => "span2" %>
        </div>
      </td>
      <td class="span2 icons">
        <%= f.submit t('actions.save'), :disable_with => t('messages.please_wait'), :class => 'btn small', :remote => true %>
      </td>
    </tr>
  </table>
<% end %>

在 views/issue_values 我有:

  1. edit.js.erb

  2. show.js.erb

  3. update.js.erb

  4. _form_row.html.erb

  5. _issue_values_table.html.erb

嗯,我不明白为什么这不起作用。

日志是:

在 2013-12-13 08:39:36 -0200 开始为 127.0.0.1 获取“/projects/pro-/releases/release02/values/14/edit” 由 IssueValuesController#edit as JS 处理 参数:{"project_id"=>"pro-", "release_id"=>"release02", "id"=>"14"} SQL (0.5ms) 显示表格 用户负载 (0.1ms) SELECT users.* FROM users WHERE ((users.auth_token = 'ji2lt8p1185q6q1l' AND users.status_id = 2)) 限制 1 SQL (1.5ms) 描述releases_browser_versions SQL (0.6ms) 描述releases_os_versions SQL (0.7ms) 描述releases_mobile_models 释放负载 (0.1ms) SELECT releases.* FROM releases WHERE releases.identifier = 'release02' LIMIT 1 IssueValue Load (0.1ms) SELECT issue_values.* FROM issue_values WHERE issue_values.id = 14 LIMIT 1 SQL (0.6ms) 显示表格 项目负载 (0.1ms) SELECT projects.* FROM projects WHERE projects.identifier = 'pro-' LIMIT 1 缓存 (0.0ms) SELECT issue_values.* FROM issue_values WHERE issue_values.id = 14 限制 1 渲染 issue_values/_form_row.html.erb (34.6ms) 渲染 issue_values/edit.js.erb (36.1ms) 在 642 毫秒内完成 200 次 OK(查看次数:50.4 毫秒 | ActiveRecord:4.3 毫秒) [2013-12-13 08:39:36] 警告无法确定响应正文的内容长度。设置响应的内容长度或设置 Response#chunked = true

在 2013-12-13 08:39:37 -0200 开始 POST "/projects/pro-/releases/release02/values/14" for 127.0.0.1 由 IssueValuesController#update 处理为 HTML 参数:{"utf8"=>"✓", "authenticity_token"=>"vuyP9Jwm4pS63OF7xucBHGo0L5m61ayj3aWcXYpFTKM=", "issue_value"=>{"value"=>"10,00", "client_value"=>"5,00"} , "commit"=>"Salvar", "project_id"=>"pro-", "release_id"=>"release02", "id"=>"14"} SQL (0.5ms) 显示表格 用户负载 (0.1ms) SELECT users.* FROM users WHERE ((users.auth_token = 'ji2lt8p1185q6q1l' AND users.status_id = 2)) 限制 1 SQL (0.7ms) 描述releases_browser_versions SQL (0.5ms) 描述releases_os_versions SQL (0.6ms) 描述releases_mobile_models 释放负载 (0.1ms) SELECT releases.* FROM releases WHERE releases.identifier = 'release02' LIMIT 1 IssueValue Load (0.2ms) SELECT issue_values.* FROM issue_values WHERE issue_values.id = 14 LIMIT 1 SQL (0.5ms) 显示表格 项目负载 (0.1ms) SELECT projects.* FROM projects WHERE projects.identifier = 'pro-' LIMIT 1 缓存 (0.0ms) SELECT issue_values.* FROM issue_values WHERE issue_values.id = 14 限制 1 SQL (0.1ms) 开始 SQL (0.1ms) 提交 在 784 毫秒内完成 500 内部服务器错误

ActionView::MissingTemplate(缺少模板 issue_values/show with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[ :pt, :pt]} 在视图路径 "/var/www/base2_crowdtest/2112/final/trunk/app/views", "/usr/local/rvm/gems/ruby-1.9.3-p448/gems/client_side_validations -3.1.4/app/views”、“/usr/local/rvm/gems/ruby-1.9.3-p448/gems/declarative_authorization-0.5.6/app/views”、“/usr/local/rvm/gems /ruby-1.9.3-p448/gems/kaminari-0.13.0/app/views"): app/controllers/issue_values_controller.rb:12:in block (3 levels) in update' app/controllers/issue_values_controller.rb:11:inblock in update' app/controllers/issue_values_controller.rb:9:in `update'

在救援/布局中渲染 /usr/local/rvm/gems/ruby-1.9.3-p448/gems/actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/missing_template.erb (0.8ms)

有人帮帮我吗?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-3.1


    【解决方案1】:

    如果您不需要重定向,则只需将其删除。和add respond_to/respond_with to controller。此外,您还需要 update.js.erb 来处理成功保存记录时的情况。像这样:

    class IssueValuesController < LoginRequiredController
      respond_to :js, only: [:update]
      respond_to :html
      filter_resource_access :nested_in => :releases 
    
      def update
        if @issue_value.update_attributes(params[:issue_value])
          flash.now[:notice] = t('messages.successfully_updated_entity.f',
                                                     :entity => IssueValue.model_name.human)
        end
        respond_with(@issue_value)
      end
    
    # rest of the class ommited
    end
    

    解决方法

    尝试将您的表单更改为:

    <%= form_for [@project, @release, @issue_value], :remote => true, :html => {:format => "js", :style => "margin:0"} do |f| %>
    

    【讨论】:

    • 我试过这个:def update if @issue_value.update_attributes(params[:issue_value]) flash[:notice] = "Customer was successfully updated." @issue_value = IssueValue.all respond_to do |format| format.js end end end`,我创建了文件 update.js.rb,但还是不行。
    • 你安装了“jquery-rails”吗?看看this answer
    • 日志显示:由 IssueValuesController#edit 作为 JS 参数处理。我也查过了,我有那个宝石。
    • 请查看解决方法。尽管您当前的方法不起作用很奇怪。我很确定您不需要 @issue_value = IssueValue.all 部分。
    • 我没有使用 generate 创建控制器,可能是这样吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多