2

Rails3.2を使用しています。

私は多くの種類のモデルを持っています。モデルの「値」を field_for.label に設定する方法はありますか?

これが私がやりたいことです。

クライアント モデル

class Client < ActiveRecord::Base
  attr_accessible :name, :renewal_month1, :renewal_month10, :renewal_month11, :renewal_month12, :renewal_month2, :renewal_month3, :renewal_month4, :renewal_month5, :renewal_month6, :renewal_month7, :renewal_month8, :renewal_month9, :sales_person_id, :usable, :user_id, :licenses_attributes

  has_many :licenses, :dependent => :destroy
  has_many :systems, :through => :licenses
  accepts_nested_attributes_for :licenses

end

ライセンス モデル

class License < ActiveRecord::Base
  attr_accessible :amount, :client_id, :system_id

  belongs_to :client
  belongs_to :system
  def system_name
    self.system.name
  end

end

システムモデル

class System < ActiveRecord::Base
  attr_accessible :name, :sort

  has_many :clients

  has_many :licenses
  has_many :clients, :through => :licenses

end

クライアント コントローラーで、すべてのシステムのライセンス オブジェクトを作成しました。

def new
  @client = Client.new
  @title = "New Client"

  System.all.each do |system|
    @client.licenses.build(:system_id => system.id)
  end

  respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @client }
  end
end

_form.html.erb では、ライセンスに fieds_for を使用します

<%= f.fields_for :licenses do |ff| %>
<tr>
    <td><%= ff.label :system_id %></td>
    </td>
    <td> <%= ff.number_field :amount %>
    <%= ff.hidden_field :system_id %> 
    <%= ff.hidden_field :system_name %> 
    </td>
</tr>
<% end %>

私が得る結果はこれです

<tr>
    <td><label for="client_licenses_attributes_0_system_id">System</label></td>
    </td>
    <td> <input id="client_licenses_attributes_0_amount" name="client[licenses_attributes][0][amount]" type="number" value="10" />
    <input id="client_licenses_attributes_0_system_id" name="client[licenses_attributes][0][system_id]" type="hidden" value="1" /> 
    <input id="client_licenses_attributes_0_system_name" name="client[licenses_attributes][0][system_name]" type="hidden" value="SYSTEMNAME" /> 
    </td>
</tr>

ラベルはこんな感じにしたいです。

    <td><label for="client_licenses_attributes_0_system_id">SYSTEMNAME</label></td>

SYSTEMNAME はモデル SYSTEM の値です。system_name として定義された LICENSE モデルに仮想属性があります。hidden_​​field で SYSTEMNAME を取得できたので、モデルとコントローラーは問題ないと思います。モデルの値をラベルに設定する方法がわかりませんでした。

4

2 に答える 2

3

以下はなぜ使えないのでしょうか?

<%= ff.label :system_name %>

次のコードも同様に機能するはずです

<%= ff.label :amount, ff.object.system_name %>

これをテストすることはできませんが、生成されることを願っています

<label for="client_licenses_attributes_0_amount">SYSTEMNAME</label>

金額フィールドのラベルが作成されるため、ユーザーがクリックすると金額フィールドがフォーカスされることに注意してください。

于 2012-06-19T14:57:30.510 に答える
0

system_name をラベルに追加してみましたか

<%= f.fields_for :licenses do |ff| %>
<tr>
    <td><%= ff.label :system_id, :system_name %></td>

    <td> <%= ff.number_field :amount %>
    <%= ff.hidden_field :system_id %> 
    <%= ff.hidden_field :system_name %> 
    </td>
</tr>
<% end %>
于 2012-06-19T14:57:20.620 に答える