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
应用程序/视图/合同/ _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
就是这样......删除按钮只显示在第二行和后续属性行中。
答案 0 :(得分:1)
当你处于表单(部分)时,代码行不会引用表单(部分)所针对的Codeline实例,而是一个ActionView :: Helpers :: FormBuilder的实例。简单知道如何将信息关联到Codeline的实例。你知道,因为在部分的第一行,你有codeline.object.build_code
。
因此,如果要访问有关units_alloc关联的信息,可以使用codeline.object.units_alloc
访问它们。这将为您提供有条件的数据。
答案 1 :(得分:1)
我想补充一点,如果你的锚标记的目的是使用一些javacscript从表单列表中删除元素,你可能会使用错误的控件。锚标签不是表单元素,它们应指向资源/内容,而不是用作动画/客户端行为触发器。根据您描述的用例,输入标记类型=按钮对于您似乎想要实现的内容将是一个更合适的元素。