1

我找不到如何在 Rails 中显示动态标签,我尝试使用该:value => show_name属性但它不起作用,它只显示Show name. 这是查看代码

<p>
   <div class="control-group">
           <%= f.label :show_name, :value => :show_name, :class => 'control-label' %> 
           <%= #this next line fails with undefined method `show_name' for #<ActionView::Helpers::FormBuiler>
              #f.label f.send :show_name, :class => 'control-label'
           %> 
       <div class="controls">
           <%= f.text_field :variable_value, :class => 'text_field' %> 
           <%= f.hidden_field :variable_id, :class => 'text_field' %> 
       <%= f.hidden_field :show_name, :class => 'text_field' %> 
       </div>
   </div>
<p>

如果需要,这里是我模型中的 show_name 定义。

  def show_name
    Variable.find_by_id(self.variable_id).name
  end
4

2 回答 2

1

好的,所以我最终找到了一个非常好的解决方案DRY,感谢这篇文章。我唯一要做的就是解释一下要做什么:

首先,我们将假设我们有嵌套表单的最复杂的情​​况,因此我们在方法fields_for内部使用form_for

  <!-- f represents the form from `form_for` -->
  <%= f.fields_for :nested_model do |builder| %>
    <p>
      <div class="control-group">

         <!-- here we are just calling a helper method to get things DRY -->

         <%= builder.label return_value_of_symbol(builder,:show_name), :class => 'control-label' %> 
         <div class="controls">
            <%= builder.text_field :variable_value, :class => 'text_field' %> 
            <%= builder.hidden_field :variable_id, :class => 'text_field' %> 
         </div>
      </div>
    </p>
  <% end %>

请注意,我们在帮助程序的参数中包含了构建器对象(在 fields_for 调用中指定)。

在我们的助手中,我们定义了return_value_of_symbol函数

  def return_value_of_symbol(obj,sym)
    # And here is the magic, we need to call the object method of fields_for
    # to obtain the reference of the object we are building for, then call the
    # send function so we send a message with the actual value of the symbol 
    # and so we return that message to our view.  
    obj.object.send(sym)
  end
于 2012-11-19T20:04:28.763 回答
0

使用label_tag,将 show_name 放在控制器上的实例变量上,然后像这样使用:

<%= label_tag @show_name, nil, :class => 'control-label' %>

编辑:

在您的 上application_helper.rb,创建一个与此类似的辅助方法:

def show_name(name)
  content_tag(:label, name, :class => 'control-label')
end

然后你可以show_name(name)像这样在你的视图上使用:

<%= show_name(@name) %>

只需记住填充@name variable.

于 2012-11-19T16:11:32.523 回答