0

我有一个名为“Controller”的父模型(成熟的应用程序,而不是我的决定)

belongs_to :controller
accepts_nested_attributes_for :controller

形式:

= f.fields_for :controller do |c|
    = c.hidden_field :id, :value => @controller.id
    = c.text_field :slw_type

不会显示。

= f.fields_for :literally_anything_else do |c|
    = c.hidden_field :id, :value => @controller.id
    = c.text_field :slw_type

如果将变量名称更改为其他任何名称,则表单将构建。我有一种预感,它是特定于 Rails 的保留名称。

问题:

有什么问题?我怎样才能做到这一点?

解决了:

问题是父模型尚未与子模型关联。我的错误是没有提供所有必要的信息。

这行得通。

def new
    @controller = Controller.find(params[:controller_id])
    @inspection = Inspection.new(:controller => @controller)

因此我的 fields_for 表单构建器也可以工作。

4

1 回答 1

1

选择一些无害的变量名。 not_really_a_controller管他呢。将其用于您的变量和表单。然后,在您的实际控制器(例如 ActionController::Base 后代)中,重命名传入参数,以便模型不知道任何不同,如下所示:

before_filter :filter_params

private
 def filter_params
   if params[:not_really_a_controller]
     params[:controller] = params.delete(:not_really_a_controller)
   end
 end

我过去曾出于类似原因使用此策略,但并非专门针对controller. 不过值得一试!

于 2013-02-26T15:44:24.017 回答