0

Rails 3.2.12 和 Ruby 1.9.3 和 Haml

我想使用属性计数来控制“link_to“删除””的显示,但我在设置逻辑时遇到了问题。

以下是我的表单中的一些代码,因为它是当前的:

    .field
      = codeline.label :name, "Units Alloc"
      %br/
      = codeline.text_field :units_alloc, :precision => 6, :scale => 2, :size => 10,
       :class => "ui-state-default"
      = codeline.hidden_field :_destroy
      = link_to "remove", '#', class: "remove_fields"

这很好用,但我显示了“删除”链接,我希望它只显示是否有两个 :units_alloc 属性。

这是我尝试过的:

    .field
      = codeline.label :name, "Units Alloc"
      %br/
      = codeline.text_field :units_alloc, :precision => 6, :scale => 2, :size => 10,
       :class => "ui-state-default"
      - if :units_alloc.count > 1
      = codeline.hidden_field :_destroy
      = link_to "remove", '#', class: "remove_fields"

这是我的错误:

       NoMethodError in Contracts#new

       Showing /home/tom/rails_projects/tracking/app/views/contracts
       /_codeline_fields.html.haml where line #9 raised:

       undefined method `count' for :units_alloc:Symbol

如果我在参数中使用 units_alloc 而不是符号,我仍然会收到错误消息:

        NameError in Contracts#new

        Showing /home/tom/rails_projects/tracking/app/views/contracts
        /_codeline_fields.html.haml where line #9 raised:

        undefined local variable or method `units_alloc' for
        #<#<Class:0xadbde90>:0xa8956e8>

我尝试使用'codeline.units_alloc',但这不起作用,并且标记了相同的错误。

有什么建议或指示可以帮助我解决此问题吗?

谢谢。

解决方案:感谢 James Scott Jr。

应用程序/控制器/contracts_controller.rb

  def New
     @show_remove = false
     ....
     ....
   end

app/views/contracts/_codelines_fields.html.haml

   .field
      = codeline.label :name, "Units Alloc"
      %br/
      = codeline.text_field :units_alloc, :precision => 6, :scale => 2, :size => 10,
       :class => "ui-state-default"
      - if @show_remove
          = codeline.hidden_field :_destroy
          = link_to "remove", '#', class: "remove_fields"
      - else
         - @show_remove = true

就这样做了……删除按钮仅显示在第二行和随后的属性行中。

4

2 回答 2

1

我想补充一点,如果您的锚标记的目的是使用一些 javacscript 从表单列表中删除元素,那么您可能使用了错误的控件。锚标签不是表单元素,它们应该指向资源/内容,并且不能用作动画/客户端行为触发器。根据您描述的用例,输入标签 type=button 将是您似乎想要实现的更合适的元素。

于 2013-02-24T22:37:18.350 回答
1

当您进入表单(部分)时,codeline 不会引用表单(部分)所针对的 Co​​deline 实例的实例,而是简单知道如何操作的 ActionView::Helpers::FormBuilder 的实例将信息关联到 Codeline 的实例。你知道,因为在部分的第一行,你有codeline.object.build_code.

因此,如果您想访问有关 units_alloc 关联的信息,您可以使用codeline.object.units_alloc. 这将为您提供有条件的数据。

于 2013-02-19T23:04:01.937 回答