0

我喜欢直接从表单继承定义 mongoid 对象的类型 (:_type)。

定义和对象的类型非常简单:

shapes.build({ x: 0, y: 0 }, Circle)

但是现在我想知道是否可以通过使用表单中的参数来自动构建这样的对象。像这样的东西:

<%= form_for :shapes do |s| %>
    <%= s.text_field(:x) %>
    <%= s.text_field(:y) %>
    <%= t.hidden_field(:_type, value: "Circle") %>
<% end %>

然后使用类似的东西:

Shapes.new(params[:shapes])

在隐藏字段中定义 _type 值似乎是不可能的。有任何想法吗?

4

1 回答 1

0

尝试以下内容

model = params[:shapes][:_type].to_s.classify.constantize

model.new(params[:shapes])

第一位获取字符串并将其转换为实际的类,因此“Circle”变成了 Circle,如果你明白我的意思的话。下一部分在实际类而不是该类的父类上调用 new。这样就设置了正确的类型。

常量化的文档

于 2013-04-09T20:10:44.493 回答