在fields_for中的字段上使用observe_field

时间:2011-12-07 15:25:05

标签: ruby-on-rails

我正在尝试观察在fields_for循环中生成的字段。

事情是该字段的id是动态生成的。

_form.html.erb

<% form_for @exp, :url => {:action => "update"} do |f| %>
    <% f.fields_for:patterns do |builder| %>
    <%= render 'pattern_fields', :f => builder %>
    <% end %>
<% end %>

_pattern_fields.html.erb

Pattern: <%= f.select(:LC_PATTERN, [['stripes', 'stripes'],
                                  ['dots', 'dots'],
                                  ['lines', 'lines'],
                                 ],{ :prompt => "Please select"}
                                 ) %>

<%= observe_field("------", :frequency => 1,
:with => "'id='+value", :function => 'alert(value)')%>

我的问题是如何在fields_for标记内获取字段的id。

1 个答案:

答案 0 :(得分:0)

我终于明白了。在互联网上找到这个解决方案......希望它可能对其他人有帮助。

在您的application_helper.rb中,添加以下功能:

def sanitized_object_name(object_name)
  object_name.gsub(/\]\[|[^-a-zA-Z0-9:.]/,"_").sub(/_$/,"")
end

def sanitized_method_name(method_name)
  method_name.sub(/\?$/, "")
end

def form_tag_id(object_name, method_name)
  "#{sanitized_object_name(object_name.to_s)}_#{sanitized_method_name(method_name.to_s)}"
end

然后,您可以使用以下代码查看“fields_for”内生成的字段的ID:

<%=form_tag_id(f.object_name, :LC_PATTERN) %>