新手问题 要从 edit 页面获取 params,同时又不能在控制器里定义 update 方法

Catherine · 2015年11月28日 · 最后由 msg7086 回复于 2015年12月02日 · 1837 次阅读

我在用 paperclip 和 activescaffold,就是从 edit 页面里的表单内上传个文件,因为需要读取这个文件修改数据库里的内容,所以必须自己写 update 方法,但 activescaffold 里应该是自己定义好了 update 方法的。我自己定制,就把它的覆盖了,虽然不报错,文件也可以提取,数据库也可以根据文件内容更新。

但在 update 方法里使用任何 redirect_to,都没法正常跳转页面,log 里看到开始执行 redirect_to,整个过程都完成了,没有一点报错,但页面没有任何动静。把 redirect_to 去掉后可以看到报错信息

ActionView::Template::Error (undefined method `to_label' for nil:NilClass):
    3:                                                 :form_action => form_action ||= :update,
    4:                                                 :method => method ||= :put,
    5:                                                 :cancel_link => cancel_link,
    6:                                                 :headline => headline ||= @record.to_label.nil? ? active_scaffold_config.update.label : as_(:update_model, :model => @record.to_label)} %>
  active_scaffold (3.3.3) app/views/active_scaffold_overrides/_update_form.html.erb:6:in `__var_lib_gems_______gems_active_scaffold_______app_views_active_scaffold_overrides__update_form_html_erb__538170661__646349448'
  actionpack (3.2.14) lib/action_view/template.rb:145:in `block in render'
  activesupport (3.2.14) lib/active_support/notifications.rb:125:in `instrument'
  actionpack (3.2.14) lib/action_view/template.rb:143:in `render'
  actionpack (3.2.14) lib/action_view/renderer/partial_renderer.rb:265:in `render_partial'

可以确定是在 update 这个问题上。但陷入死循环了 定义 update---->覆写了原方法 不定义 update----->没法取 params....

只要有办法获取那个 params,或者有办法在控制器里强制刷新整个页面都可以.........

我不知道怎么解决问题,只能建议不要用这些管理插件。这些插件第一眼看上去很好,要定制的时候就困难重重,不单要了解 Rails,还要了解这个 gem 的工作原理。我在用过几个这类插件之后都自己写管理功能了。

你可以把 activescaffold 的 update 方法内容 copy 到自己的 update 里,再根据情况修改

用自己的想法去实现你的功能,你会收获很多

用过这个插件做过一个比较小的项目,这个插件有提供 before_update_save(record) 类似的 controller 方法,你可以在这处理图片 record 就是 model 对象

管理插件有时候就是一种坑

Ruby 应该不会出现这种问题吧。继承的话可以 super,重写的话可以重命名方法。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号