【问题标题】:Rails: Two values for label_method (simple_form_for)Rails:label_method 的两个值(simple_form_for)
【发布时间】:2016-06-22 09:51:34
【问题描述】:

我想创建一个新的 pm_workload。我有以下代码-sn-p

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

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

【问题讨论】:

  • 你需要 label_method 应该是 name 和 project_number 的连接?
  • 是的,这就是我想尝试的,因为我有时项目名称相同但项目编号不同

标签: ruby-on-rails ruby simple-form-for


【解决方案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 %>

【讨论】:

  • 感谢您的快速答复。我已经尝试过您的解决方案,但收到此错误消息:undefined method `name_of_method' for #<0x007f0d8beb77c0>
【解决方案2】:

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

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

<% 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 %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    相关资源
    最近更新 更多