我有一个非常复杂的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;
希望这能澄清事情。