我有很多不同形式的共享代码,我正在尝试使用命名的yield。我希望_nav.html.haml使用content_for块中定义的每个页面的字段呈现表单。
示例视图:
- content_for :form_fields do
= f.text_field :name
= f.text_field :number
= render :layout => 'projects/shared/nav', locals: {:url => projects_path, :form => @form}
_nav的内容:
= form_for(form, url: url, layout: :horizontal) do |f|
= f.alert_message "Please fix the errors below before saving this page."
= yield :form_fields
我在示例视图中收到以下错误:
undefined local variable or method `f'
答案 0 :(得分:1)
您没有将表单对象传递给content_for。这就是它显示错误的原因。
不幸的是,除了名称和块之外,您无法将任何参数传递给content_for。
=> yield(:block_name, form_object)
ArgumentError: wrong number of arguments (2 for 0..1)
from /test/.rvm/gems/ruby-2.1.5/gems/actionpack-4.0.2/lib/action_view/context.rb:31:in `_layout_for'
呈现content_for视图的方法仅使用块的名称。在这里查看。 http://www.rubydoc.info/docs/rails/4.1.7/ActionView/Context:_layout_for
你不应该在这里使用content_for。这里的正确解决方案是" Partials"
http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials
答案 1 :(得分:0)
在将表单传递给content_for块后遇到困难,我最终删除了content_for并重新安排了我的代码,如下所示:
= render :layout => 'projects/shared/nav', locals: {:url => projects_path, :form => @form} do
= @f.text_field :name
= @f.text_field :number
收益如此:
= form_for(form, url: url, layout: :horizontal) do |f|
- @f = f
= f.alert_message "Please fix the errors below before saving this page."
= yield
感觉有点乱,但我无法通过其他方式传递表格,按预期工作。