ruby-on-rails - Rails form_for 条件参数

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

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

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

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

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

最佳答案

您需要将该 block 传递给my_form。实现此目的的方法是在您希望 block 移动的位置包含一个 yield:

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

这应该采用您在 View 中传递的 block :

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

关于ruby-on-rails - Rails form_for 条件参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18594608/

相关文章:

javascript - 仅在一页上运行 Javascript

ruby-on-rails - 在 docker 的 ubuntu 镜像中运行网络服务器

arrays - 如何在 Ruby 中重新创建(每次创建新的)数组?

forms - 如何制作 Firebase 表单?

forms - Codeigniter form_open 指定id

ruby-on-rails - 如何为 Sidekiq 工作人员设置 default_url_options?

ios - Rails API 的 POST 方法

ruby - Sinatra/Ruby 默认一个参数

css - 如何在表单中设置禁用选项的样式

ruby-on-rails - MongoDB 中的受控数据分片