2

我有一个表格,定义如下:

form_for(@model) do |f|
    # Really a lot happens here 
end

我想知道是否有任何方法可以调整第一行:form_for(@model)

首先,我认为我可以使用辅助函数:

def my_form
   if some_condition
      form_for(@model)
   else
      form_for [@model, @nested_model]
   end
end

然后将其嵌入到我的表单调用中。像这样:

my_form do |f|
    # Really a lot happens here 
end

但是,我得到“ No block given ”错误。有人可以指出 - 为什么以及如何解决它?也许我可以使用其他任何方法?

不要问我为什么需要它。只是为了让事情尽可能干燥。表单应该是可重用的,你知道的:D

4

1 回答 1

2

您需要将块传递给my_form. 做到这一点的方法是包括一个yield你想要块去的地方:

def my_form
   if some_condition
      form_for(@model) { |f| yield f }
   else
      form_for [@model, @nested_model] { |f| yield f }
   end
end

这应该采用您在视图中传递的块:

my_form do |f|
    # Really a lot happens here 
end
于 2013-09-03T14:29:44.880 回答