我喜欢直接从表单中定义具有继承性的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值似乎不可能。有什么想法吗?
答案 0 :(得分:0)
尝试类似以下内容
model = params[:shapes][:_type].to_s.classify.constantize
model.new(params[:shapes])
第一位接受字符串并将其转换为实际的类,因此如果你得到我说的话,“Circle”就变成了Circle。下一部分在实际类而不是该类的父类上调用new。这样就设置了正确的类型。