Rails:label_method (simple_form_for) 的两个值
Rails: Two values for label_method (simple_form_for)
我想创建一个新的 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)
不可能在标签方法中使用属性或字段名称。但是我有一个替代方案可以解决这个问题。
您正在获取 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 %>
我这周一直在研究这个问题。但它的一个变体,在我的例子中,我希望标签文本被包裹在 中。我以为我在寻找与 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 %>
我想创建一个新的 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)
不可能在标签方法中使用属性或字段名称。但是我有一个替代方案可以解决这个问题。
您正在获取 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 %>
我这周一直在研究这个问题。但它的一个变体,在我的例子中,我希望标签文本被包裹在 中。我以为我在寻找与 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 %>