2010-09-23 61 views
0

我对抽象类使用继承控制器。我试图避免在所有的后代控制器中重写操作。我怎么能找出表单值数组所在的关键字的名字?例如:是否有可能在Rails params哈希中检测数组的键?

主类目前使用它来更新行

if @parent.update_attributes(params[:parent]) 

,从它继承每个类都有将无法识别

<input type="text" value="" name="child[title]" id="child_title"> 

如何动态检测自己的名字:我需要在params []中为每个表单使用名称?我会满足于我的部分,处理编辑和新一些的form_for指导:

form_for @parent do |f| 

我已经试过下面是什么,但我不能让它做PUT。当我编辑它使一个新的行:

form_for @child, :as => :parent, :url => child_path do |f| 

回答

1

的方法的form_for的最后PARAM:您可以通过检查“CONTROLLER_NAME”类似的东西,这样做感谢没有任何人(当然是保存Cryo),我的实例变量中一直有关键字的名字,我只是不知道如何把它弄出来,并将它变成我需要的params散列符号。我是如何做到的:

@element.update_attributes(params[@element.class.name.downcase.to_sym]) 

这样我就可以创建一个资源,让它从父控制器继承,使用默认的窗体设置,并且仍然从父控制器回收逻辑。

0

我真的不知道你在问什么。所以我请你原谅,如果我的答案是不相关的。

1.我的理解是,您要查找的第一件事是如何将params散列中的特定键映射到已发出投递/放入请求的实际后代控制器。

keys = { 'ChildController1' => :child1, 'ChildController1' => :child2, }

key = key[controller.controller_name] 
@model.update_attributes(params[key]) 

2.如果需要执行PUT请求添加:html => {:method => :put}为FormBuilder帮手(form_for @resource, :url => {resource_path(@resource)}, :html => {:method => :put}

+0

你几乎明白我在问什么。你提出的建议可能会奏效,但它有点脆弱,因为我必须保持一个小孩的散列。我需要一个方法来帮助我刮取由Rails窗体生成的数组的键。我正在尝试这样做,所以我不必在两个单独的部分中使用:method =>:put和:method =>:post或者在控制器中重复自己。 – 2010-09-25 19:57:21