【发布时间】:2016-12-26 01:40:35
【问题描述】:
在 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 %>
路由.rb
resources :parents do
resources :children
end
如何通过在控制器中使用某种逻辑来替换方法 parent.children 的调用 - 例如,需要 url 参数的 ChildrenController::index 方法?
我相信这将使我能够从模型中抽象出视图。
我的意思是抽象 - 如果我更改模型 - 例如,它不会在父子之间有 has_many 关联 - 但仍然想保留视图,那么我将只更改控制器中的代码而不是视图.
此外,我可以将控制器中的模型逻辑提取到某些业务类中,该类将像模型接口一样使用。
我正在尝试构建具有分离的表示层(视图、控制器)和业务层(业务类、活动记录)的两层架构。
或许这种架构可以避免类似 futurelearn 门户网站决定将其 STI 模型(单表)拆分为多个不同模型的情况。但是没有真正的分离它变成了欺骗 Rails 的创造性任务(参见https://about.futurelearn.com/blog/refactoring-rails-sti)。代码有很多关联调用,有必要开发一些方法来保留这些调用(只是因为否则需要更改太多代码)并同时更改模型。
【问题讨论】:
标签: ruby-on-rails ruby model-view-controller