0

フォームから直接継承するモンゴイド オブジェクトの型 (:_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 に答える