我应该在哪里以及如何为表单创建复杂的数组?

时间:2014-05-08 17:59:14

标签: ruby-on-rails arrays forms

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

现在,当我开始创建应用程序时,我在控制器中创建了所有这些数组。所以,当我有一个对象的创建形式的表单时,控制器方法看起来像这样:

def new
  @number_array = [1,2,3,4,5]
end

现在问题在于它创建了一个胖控制器,当我提交表单时遇到问题并重新加载时,数组就会丢失。

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

所以我的控制器方法看起来像这样

def return_number_array
  [1,2,3,4,5]
end

现在这只适用于一个小阵列,但是当我必须调用不同的模型来获取对象时,在模型中执行此操作似乎并不正确

@object.return_number_array

获取数组。

由于我没有发现任何相关信息(或者可能在错误的地方搜索过),我真的很想得到你的意见。也许我甚至应该使用辅助方法呢?

而且,正确的地方在哪里?如果我需要以ModelB的形式从ModelA获取对象,我是否在A或B中创建数组?

我真的很感激输入。抱歉,如果这看起来很愚蠢,但我真的给了它一个想法和一些谷歌搜索......

更新

很抱歉,如果我还不够清楚的话。我会尝试一个例子:

我有一个名为Document的模型。在创建模型的表单中,我有:

_form.html.erb

<%= simple_form_for @dms_definition do |f| %>
  <%= f.input :module_type, as: :select, collection: @modules_for_dropdown %>
<% end %>

现在通常我会在我的新方法中创建数组@types_for_dropdown,其中呈现表单的视图:

def new
  @document = Document.new

  @modules_for_dropdown = []
  @modules = Module.all.order(qry_mod_text: :asc)
  @modules.each do |i|
    @modules_for_dropdown = @modules_for_dropdown << [i.name,"mod#{i.id}",{:class => "mod"}]
  end
  @submodules = Submodule.where("NOT(name LIKE ?)", "%_history").order(name: :asc)
  @submodules.each do |i|
    @modules_for_dropdown = @modules_for_dropdown << [i.name,"sub#{i.id}",{:class => "sub"}]
  end
end

现在在创建它的控制器方法中,它看起来像这样:

def create
  @document = Document(document_params)
  if @document.save
    redirect_to dms_definitions_url
  else
    render :new
  end
end

因此,当由于验证错误导致保存失败时,新操作会再次呈现,但是丢失了我之前定义的数组,并且选择只是随机填充&#34;是&#34;,&#34; no& #34;

希望这能澄清事情。

0 个答案:

没有答案