【问题标题】:Rails: How to render repetitive form block?Rails:如何呈现重复的表单块?
【发布时间】:2012-08-17 18:44:46
【问题描述】:

为了不重复我自己,我想创建一个以特定方式呈现表单块(文本字段或文本区域)的函数。我想要这样的结果(使用 Haml 和 twitter-bootstrap):

.form-block.input-prepend
    %span.add-on>
        %i.icon.icon-home
    = f.text_field :name, :value => @store.name, :placeholder => 'Company Name'

为此,我创建了一个文件views/layouts/_form-block.html.haml,并在其中插入了以下代码:

.form-block.input-prepend
    %span.add-on>
        %i{ :class => "icon icon-#{icon}" }
    = yield

我在我的视图中调用该块:

- render :template => 'layouts/_form-block', :locals => { :icon => 'home' } do
    = f.text_field :name, :value => @store.name, :placeholder => 'Company Name'

但它不起作用。我有以下错误'nil' is not an ActiveModel-compatible object that returns a valid partial path.

你有什么想法吗?这是最好的方法吗?

提前致谢。

【问题讨论】:

    标签: ruby-on-rails forms rendering haml


    【解决方案1】:

    如果要使用= yield 传递块,则需要渲染为布局。使用render :layout => 而不是render :template =>

    【讨论】:

    • 感谢 mckeed,但不幸的是,我收到以下错误:Missing partial layouts/_form-block with {:handlers=>[:haml, :coffee, :erb, :builder], :locale=>[:en], :formats=>[:html]}. Searched in: * "/Users/Hassinus/www/rails/color01/app/views"
    • 很奇怪。那就是文件所在的位置,对吧? app/views/layouts/_form-b​​lock.html.haml ?
    • 这是正确的答案。你应该在没有_ 的情况下调用布局:= render :layout => 'layouts/form_block do。并且文件名应该是:_form_block.html.haml
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 2012-12-02
    相关资源
    最近更新 更多