我在railscast中遵循复杂的嵌套表单,并且我使它工作,在这里和那里进行一些调整。但问题是,如何在不使用控制器的情况下自动加载嵌套表单?
def new
@model = Model.new
@model.child.build
end
非常感谢!
答案 0 :(得分:0)
如何在不使用的情况下自动加载嵌套表单 控制器?
简单(不正确)的答案是包含一个Partial,它将定义上面的ActiveRecord对象,如下所示:
#app/views/controllers/_your_partial.html.erb
<% model = Model.new %>
<% mode.child.build %>
<%= form_for model do |f| %>
...
问题与此相反,它违背了MVC programming pattern,这相当于Rails世界中的上帝
-
<强> MVC 强>
你的问题很奇怪,因为它违背了Rails的核心要素之一:
这意味着您对Rails应用程序(通过URL)所做的每个请求都必须由controller action
来满足。控制器的作用是配置/收集运行应用程序所需的data
,然后为用户填充视图。
如果你想“在没有控制器的情况下调用表单”,你基本上就是说你想要反对这些约定。除非您创建gem
(允许您在控制器外部推断ActiveRecord定义代码),否则您将不得不使用控制器。
虽然是一招......
-
课程方法
您将能够在控制器中使用您正在使用的功能。创建一个class method
来处理它:
#app/models/model.rb
Class Model < ActiveRecord::Base
def self.build
model = self.new
model.child.build
model
end
end
这将允许您从控制器/部分呼叫以下内容:
@model = Model.build #-> instead of Model.new :)
答案 1 :(得分:0)
module ApplicationHelper
def setup_person(person)
returning(person) do |p|
p.children.build if p.children.empty?
end
end
end
我在Ryan Daigle的网站上发现了这个,但我发现这有点过时了。我尝试了这个,但是我得到的返回没有定义或者没有方法。