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 に答える