1

我想创建一个新的 pm_workload。我有以下代码片段

<%= f.input :project_id, :collection => PmProject.order('name'), :label_method => :name, :value_method => :id, :label => "Project", :include_blank => false %>

是否可以选择为 :label_method 使用两个值?例如
:label_method => :name << (PmProject.project_number)

4

2 回答 2

1

标签方法中不能有属性或字段名称。但是我有一个替代解决方案可以为您解决此问题。

您正在使用 PmProject 集合,所以现在在 PmProject 模型中创建一个实例级方法,如下所示。

def name_of_method
  "#{name} #{project_number}"
end

现在在简单表单的视图输入上使用相同的用法,如下所示...

<%= f.input :project_id, :collection => PmProject.order('name'), :label_method => :name_of_method, :value_method => :id, :label => "Project", :include_blank => false %>
于 2016-06-22T10:08:08.200 回答
0

这周我一直在研究这个问题。但它的一个变体,在我的例子中,我希望标签文本被包裹在一个 <span> 中。我以为我正在寻找与 simple_form 有关,但实际上它仍然是 Rails ActionView 标签助手的一部分。

是的,你可以在你的模型上添加另一种方法,但是如果你想保持你的模型干净或者你想使用标签中模型中没有的东西。:label_method 也可以是一个过程。

<% label_method = proc { |p| "#{p.name} #{p.project_number}" } %>
<%= f.input :project_id, collection: PmProject.order('name'), label_method: label_method, value_method :id, label: 'Project', include_blank: false %>

或者在我的情况下

<% label_method = proc { |p| "<span>#{p.name}</span>".html_safe } %>
<%= f.input :project_id, collection: PmProject.order('name'), label_method: label_method, value_method :id, label: 'Project', include_blank: false %>
于 2021-10-31T16:54:07.263 回答