Ruby on rails 在何处以及如何为表单创建复杂数组?

Ruby on rails 在何处以及如何为表单创建复杂数组?,ruby-on-rails,arrays,forms,Ruby On Rails,Arrays,Forms,我有一个非常复杂的Rails 4应用程序,其中包含很多表单。其中许多表单都有带有数组、集合、哈希等的select标记 现在,当我开始创建应用程序时,我在控制器中创建了所有这些阵列。因此,当我为对象的创建表单创建表单时,控制器方法如下所示: def new @number_array = [1,2,3,4,5] end def create @document = Document(document_params) if @document.save redirect_to

我有一个非常复杂的Rails 4应用程序,其中包含很多表单。其中许多表单都有带有数组、集合、哈希等的select标记

现在,当我开始创建应用程序时,我在控制器中创建了所有这些阵列。因此,当我为对象的创建表单创建表单时,控制器方法如下所示:

def new
  @number_array = [1,2,3,4,5]
end
def create
  @document = Document(document_params)
  if @document.save
    redirect_to dms_definitions_url
  else
    render :new
  end
end
现在的问题是,它生成了一个fat控制器,当我在提交表单时遇到问题并重新加载表单时,数组就会丢失

上面的数组只是一个示例。我用20行代码创建了数组,并从不同的模型中检索数据。现在根据Fat Model和Skinny Controller方法,我应该在控制器中执行此操作

所以我的控制器方法是这样的

def return_number_array
  [1,2,3,4,5]
end
现在对于一个小数组来说这是可以的,但是当我必须调用不同的模型来获取所有的对象时,在模型中这样做并调用

@object.return_number_array
获取数组

由于我还没有找到任何关于这方面的信息(或者可能在错误的地方搜索),我真的很想得到你对此的意见。也许我应该用助手的方法来做这个

还有,在哪里做这件事是正确的?如果我需要ModelA中的对象以ModelB的形式出现,我是在A还是B中创建数组

我非常感谢你的意见。如果这看起来很愚蠢的话,我很抱歉,但我真的想了想,并用谷歌搜索了一下

更新:

对不起,我说得不够清楚。我将尝试一个例子:

我有一个叫做文档的模型。在创建模型的表单中,我有以下内容:

_form.html.erb

<%= simple_form_for @dms_definition do |f| %>
  <%= f.input :module_type, as: :select, collection: @modules_for_dropdown %>
<% end %>
因此,当由于验证错误而导致保存失败时,新操作将再次呈现,但会丢失我之前定义的数组,并且select将被随机的“yes”、“no”填充


希望这能澄清问题。

你的问题对我来说没有多大意义,你能详细说明一下你想要完成什么吗?比如从另一个模型获取什么样的对象,如果使用@variable,值怎么会在错误视图中丢失?这些数组不知从何而来,或者它们是否具有真正的语义?如果数组是我所认为的,你可以考虑把它们放在应用程序助手中吗?我用更多的例子更新了这个问题。@用户3334690:我考虑过了,这是我试图解决的问题之一。如果该方法使用不同的模型或被不同的模型使用,那么它应该去哪里?还有,为什么要使用helper而不是model方法呢?在您添加的示例中,我肯定会将其作为model类上的函数,可能作为模型上的常量。把它放在助手中也不是不可能的。。。在控制器中定义这样的东西很麻烦,因为正如你所说的,它会被忘记。。。但是如果你把它放在模型/助手中,它在你描述的场景中不会被忘记。。。
def create
  @document = Document(document_params)
  if @document.save
    redirect_to dms_definitions_url
  else
    render :new
  end
end