【问题标题】:Rails form_for conditional parametersRails form_for 条件参数
【发布时间】:2013-09-06 19:48:29
【问题描述】:

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

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

【问题讨论】:

  • 你能更清楚一点 some_condition 是什么意思吗?它是否在某处访问一些全局信息(您没有将其作为参数传递)?您收到一个错误,因为您的 my_form 帮助程序未设计为接受块参数。
  • @mbratch 在这里将“some_condition”视为视图中的实例变量。或者一个变量,传递给这个辅助方法。真的没关系。重要的是 - 我希望能够在我拥有的“form_for”之间切换

标签: ruby-on-rails ruby forms conditional form-for


【解决方案1】:

您需要将块传递给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

【讨论】:

  • 非常感谢您!奇迹般有效。你能解释一下,它是如何工作的吗?
  • @Dmitri 我加了一点解释。如果您在 Google 上搜索“Ruby 块”,您可以找到有关处理块的各种方法的大量详细信息。否则,如果您需要更多详细信息,请告诉我。
  • 好的,谢谢。将深入研究红宝石块! :) 但是,仍然。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多