0

我有一个 Item 作为超类,它下面有两个子类。

当用户第一次输入信息时,输入的参数都包含在hash中params[:item]。我根据输入实例化具体类型。

# instantitate the concrete type according to the input
type_of_item = Object::const_get(inputs[:type])
@item = type_of_item.new

当验证失败时,我将用户放回新页面。用户再次输入数据

但是,这一次,输入参数将被包含在params[:bidding_item]params[:direct_item其中bidding_item和direct_item是Item的子类的hash中

我尝试做类似的事情:

format.html do
  @item.becomes(Item)
  render :action=>"new"
end

我希望每次都包含输入参数,params[:item]以便我每次都能以相同的方式获取数据,但它不起作用。

现在,我解决了我的问题。但我认为这根本不是一个好习惯。

# form input
inputs = params[:item] || params[:bidding_item] || params[:direct_item]
4

1 回答 1

2

在您的new视图文件中,您可以将:as选项添加到form_for标签。

form_for @item, :as => :item do |form|

这意味着参数将始终params[:item]独立于对象类型。

于 2013-01-03T03:46:07.467 回答