如何将模型的值设置为 f.label



我正在使用rails 3.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的虚拟属性。我能够在hidden_field中获得SYSTEMNAME,所以我认为模型和控制器都很好。我只是找不到如何设置要标记的模型的值。

为什么不能使用以下?

<%= ff.label :system_name %>

我认为下一个代码也应该可以工作

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

我无法对此进行测试,但我希望它会产生

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

请注意,它会为金额字段创建一个标签,以便当用户单击它时,金额字段将得到关注。

您是否尝试过将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 %>

相关内容

  • 没有找到相关文章

最新更新