定义表单中的继承类型

时间:2013-04-09 19:45:57

标签: ruby-on-rails mongodb mongoid

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

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

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

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

<%= 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值似乎不可能。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

尝试类似以下内容

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

model.new(params[:shapes])

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

The docs for constantize