如何在Rails 4或更高版本中将视图中的模型关联调用置于控制器中?将模型关联调用从视图发送到控制器
比如我有:
型号:
class Parent
has_many :children
end
class Child
end
控制器:
class ParentController < ApplicationController
def index
@parents = Parent.all
end
end
class ChildrenController < ApplicationController
def index
@children = Parent.find(params[:parent_id]).children
end
end
查看:
父母/ index.html.erb
<% @parents.each do |parent| %>
<% render parent.children %>
<% end %>
一些局部儿童/ _child.html.erb
<%= child.name %>
route.rb
resources :parents do
resources :children
end
如何可以通过在控制器使用以某种方式逻辑替代方法parent.children
的呼叫 - 例如,ChildrenController ::需要url参数的索引方法?
我相信这将允许我从模型中抽象视图。
通过抽象我的意思是 - 如果我改变模型 - 例如,它不会有父母和子女之间的has_many关联 - 但仍然想保留视图,那么我将只改变控制器中的代码不在视图。另外,我可以将控制器中的模型逻辑提取到一些业务类,它将像模型接口一样使用。
我正尝试用独立的表示层(视图,控制器)和业务层(业务类,activerecords)构建两层架构。
也许这种架构可以避免像futurelearn门户网站那样决定将他们的STI模型(单个表格)拆分为几个不同类型的情况。但没有真正的分离,它变成了欺骗Rails的创造性任务(参见https://about.futurelearn.com/blog/refactoring-rails-sti)。代码有很多关联调用,并且有必要开发smth来保留这些调用(只是因为否则将需要更改太多的代码)并同时更改模型。
我问不同的东西。你能否告诉我有什么不清楚的问题。不过,我认为belongs_to应该创建一个选项来使用child.parent,但我并没有在例子中使用 – littlewhywhat
有用的信息,但不回答问题 –