0

我正在使用命名空间模型将不同类型的服务分配给平台:

关系:Platform has_many :services&Service belongs_to :platform

继承 : 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]作为字段名称,我的参数哈希将根据子服务包含不同的键,并且在我的控制器的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 回答