我的数据库中有一个表格,我在一个页面中显示。
保存更改时会出现问题。
我需要使用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中我有:
edit.js.erb
show.js.erb
update.js.erb
_form_row.html.erb
_issue_values_table.html.erb
嗯,我不明白为什么这不起作用。
日志是:
在2013-12-13 08:39:36 -0200开始获取127.0.0.1的GET“/ projects / pro- / releases / release02 / values / 14 / edit” 由IssueValuesController处理#edit编辑为JS 参数:{“project_id”=&gt;“pro-”,“release_id”=&gt;“release02”,“id”=&gt;“14”} SQL(0.5ms)显示表格 用户负载(0.1ms)SELECT
users
。* FROMusers
WHERE((users
。auth_token
='ji2lt8p1185q6q1l'和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)SELECTreleases
。* FROMreleases
WHEREreleases
。identifier
='release02'LIMIT 1 IssueValue Load(0.1ms)SELECTissue_values
。* FROMissue_values
WHEREissue_values
。id
= 14 LIMIT 1 SQL(0.6ms)显示表格 项目负载(0.1ms)SELECTprojects
。* FROMprojects
WHEREprojects
。identifier
='pro-'LIMIT 1 CACHE(0.0ms)SELECTissue_values
。* FROMissue_values
WHEREissue_values
。id
= 14 LIMIT 1 渲染issue_values / _form_row.html.erb(34.6ms) 渲染issue_values / edit.js.erb(36.1ms) 在642ms完成200 OK(浏览次数:50.4ms | ActiveRecord:4.3ms) [2013-12-13 08:39:36]警告无法确定响应正文的内容长度。设置响应的内容长度或设置Response#chunked = true于2013-12-13 08:39:37 -0200开始发布“/ projects / pro- / releases / release02 / values / 14”for 127.0.0.1 由IssueValuesController处理#update为HTML 参数:{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“vuyP9Jwm4pS63OF7xucBHGo0L5m61ayj3aWcXYpFTKM =”,“issue_value”=&gt; {“value”=&gt;“10,00”,“client_value”=&gt;“ 5,00“},”commit“=&gt;”Salvar“,”project_id“=&gt;”pro-“,”release_id“=&gt;”release02“,”id“=&gt;”14“} SQL(0.5ms)显示表格 用户负载(0.1ms)SELECT
users
。* FROMusers
WHERE((users
。auth_token
='ji2lt8p1185q6q1l'和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)SELECTreleases
。* FROMreleases
WHEREreleases
。identifier
='release02'LIMIT 1 IssueValue Load(0.2ms)SELECTissue_values
。* FROMissue_values
WHEREissue_values
。id
= 14 LIMIT 1 SQL(0.5ms)显示表格 项目负载(0.1ms)SELECTprojects
。* FROMprojects
WHEREprojects
。identifier
='pro-'LIMIT 1 CACHE(0.0ms)SELECTissue_values
。* FROMissue_values
WHEREissue_values
。id
= 14 LIMIT 1 SQL(0.1ms)BEGIN SQL(0.1ms)COMMIT 在784ms完成500内部服务器错误ActionView :: MissingTemplate(缺少模板issue_values / show with {:handlers =&gt; [:erb,:rjs,:builder,:rhtml,:rxml] ,: formats =&gt; [:html],:locale =在视图路径“/ var / www / base2_crowdtest / 2112 / final / trunk / app / views”,“/ usr / local / rvm / gems 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 /宝石/红宝石1.9.3-P448 /宝石/雷0.13.0 /应用/视图“): app / controllers / issue_values_controller.rb:12:在更新'
block (3 levels) in update' app/controllers/issue_values_controller.rb:11:in
块中 app / controllers / issue_values_controller.rb:9:在`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)
有人帮助我吗?
答案 0 :(得分: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| %>