0

名前空間モデルを使用して、プラットフォームにさまざまなタイプのサービスを割り当てています。

関係:Platform has_many :servicesService belongs_to :platform

Inhéritance:、、Service::Service1 < ServiceなどService::Service2 < Service

サービスタイプごとに異なるフィールドのセットがあります(私はMongoidを使用しているため、フィールドはモデルに宣言され、「サブモデル」タイプは_typeフィールドに格納されます)。

で、私はこのServicesController::newような新しいサービスを開始します:

def new
  klass    = "service/#{params[:type]}"
  @service = klass.camelize.constantize.new 
  render :form
end

params[:type]ルートパラメータ(のようなもの/:platform_id/services/new/:type)によって与えられます

私のform見解では、サービスタイプ(Haml + simple_form)に応じてフィールドを表示できるようになりました:

= simple_form_for @service do |f|

[...]

  - case @service.class

  - when Service::Service1
    = f.input :field1

[...]

これまではすべて正常に機能します:生成されたHTML入力は次のようになります:

<input class="string required" id="service_service1_field1" name="service_service1[field1]" size="50" type="text">

service_service1[field1]フィールド名として、私のparamsハッシュにはサブサービスに応じて異なるキーが含まれ、コントローラーのアクションでは、コードを「乾燥」さcreateせた状態で、サブサービスごとにケース/いつを記述する必要があります(service[field1]インスタンス化するには、正確なモデルを含む非表示フィールドを追加する必要があります)。

名前空間モデルを使用するときに、Railsにフィールド名としてルートクラスを使用させる方法はありますか?

編集:送信ボタンi18nについての同じ質問:テキストはすべてのサービスで同じであるため、 Railsは検索しhelpers.submit.service_service1.createたい場所を探します。helpers.submit.service.create

4

1 に答える 1

1

オプションを試しました:asか?これをサブクラスに使用しましたが、名前空間には使用しませんでした。:urlフォームを正しい場所に投稿するには、オプションを使用して追加の体操を行う必要がある場合があります。

If you have an object that needs to be represented as a different parameter, 
like a Person that acts as a Client:

<%= form_for(@person, :as => :client) do |f| %>
  ...
<% end %>

Railsのドキュメントから引用

于 2012-09-04T18:13:33.077 に答える