大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 用于创建和更新Mongoid数组字段的表单,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经搜索了一些使用fields_for的解决方案,但是似乎更有意义的是处理一个具有对象/模型数组的情况,而不是我拥有的,这是一个字符串数组.
我将使用一个人和一个电话号码的例子.
class Person include Mongoid::Document field :name,:type => String field :phone_numbers,:type => Array end
对于控制器,只是假设典型的控制器,但是在新方法中,我用一个空白字符串初始化了phone_number数组.
这是表单代码:
<%= form_for(@person) do |f| %> <div class="field"> <%= f.label :name %><br /> <%= f.text_field :name %> </div> <div class="field"> <%= f.label :phone_numbers %><br /> <% @person.phone_numbers.each do |phone_number| %> <%= text_field_tag "person[phone_numbers][]",phone_number %> <% end %> </div> <% end %>
这一切都很好.有一些我不喜欢的东西.
> text_field_tag调用中字段的硬编码名称.
>使用text_field_tag而不是f.text_field
有感觉就像我应该用某种方式使用fields_for而不是这个
有没有人有什么更好的建议如何实现这一点?或者你会认为这是正确的吗?
> text_field_tag调用中的字段的硬编码名称.
>使用text_field_tag而不是f.text_field
>使用fields_for
做了一些研究后,发现前两个问题可以解决,也许第三个可以但还没有尝试.
<%= form_for(@person) do |f| %> <div class="field"> <%= f.label :name %><br /> <%= f.text_field :name %> </div> <div class="field"> <%= f.label :phone_numbers %><br /> <% @person.phone_numbers.each do |phone_number| %> <%= f.text_field :phone_numbers,:name => "#{f.object_name}[phone_numbers][]"%> <% end %> </div> <%end%>
另一种干净的方法可能是使用表单构建器定义的text_field,然后具有 –
def text_field(attribute,*args) args.last.merge!(:name => "#{object_name}[#{attribute}][]") if args.last && args.last.is_a?(Hash) && args.last.delete(:array) super(attribute,args) end <% @person.phone_numbers.each do |phone_number| %> <%= f.text_field :phone_numbers,:array => true%> <% end %>
以上是大佬教程为你收集整理的ruby-on-rails – 用于创建和更新Mongoid数组字段的表单全部内容,希望文章能够帮你解决ruby-on-rails – 用于创建和更新Mongoid数组字段的表单所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。