【问题标题】:Submitting an array in a form在表单中提交数组
【发布时间】:2013-08-09 01:05:27
【问题描述】:

我一直在阅读这个问题 (Ruby on Rails: Submitting an array in a form),但它没有回答我的问题。

我有这个表格:

<div class="signup pull-right">                        
  <div>                                                
   <p style="color: white">Create Doctor:</p>           
   <%= form_for(@doctor) do |d| %>                      
     <%= d.text_field :name[1], :placeholder => "name" %>                                                      
     <%= d.text_field :name[2], :placeholder => "surname" %>                                                   
     <%= d.text_field :email, :placeholder => "email" %>
     <%= d.text_field :password, :placeholder => "password" %>                                                 
     <%= d.text_field :password_confirmation, :placeholder => "password confirmation" %>                      

    <%= d.submit "Sumbit", class: "btn btn-small btn-primary pull-right", id: "boton" %>                      
  <% end %>                                            
 </div>        

其中 name 是一个数组。我想要的是分别捕获姓名和姓氏并将它们加入名称[]中。我找不到轻松做到这一点的方法。你有什么建议吗?

提前致谢。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    我会检查直到我生成了这个 html:

    <input name='doctor[name][]'>
    

    我会尝试:

    <%= text_field_tag 'doctor[name][]' %>
    

    【讨论】:

    • 谢谢胡安,但它并没有解决它.. 你的意思是“我提到的名字”? :name 还是 :email?
    • jeje 很奇怪。忘记那部分。我发布的每个选项如何生成 HTML?
    • 胡安,我骗了你,对不起。这正是我需要的。它解决了我的问题(晚了 8 小时......)。我是新手。非常感谢!
    • 您可以将其标记为已接受...顺便说一句,我刚刚路过并看到您的评论... ;)
    【解决方案2】:

    您不需要这样的技巧来解决问题。通过虚拟cattr_accessor 设置属性将是简单而常规的。

    class Doctor < ActiveRecord::Base
      cattr_accessor :first_name, :surname
      # others...
    end
    

    然后是形式

    <%= form_for(@doctor) do |d| %>                      
     <%= d.text_field :first_name, :placeholder => "first name" %>
     <%= d.text_field :surname, :placeholder => "surname" %>   
    

    然后在控制器中

    def create
      attr = params[:doctor]
      attr[:name] = "#{attr.delete!(:first_name)} #{attr.delete!(:surname)}"
      @doctor = Doctor.new(attr)
      if @doctor.save
        # blah blah
    end
    

    【讨论】:

    • 为什么是 cattr_accesor 而不是 attr_accessor?你能解释一下吗?
    • @juanpastas,在这种情况下它们应该相同,因为我们只需要属性在实例级别上工作。两者都可以做到。我只是习惯了cattr_accessor,这是一种 Rails 方法,但不是 Ruby 方法。
    猜你喜欢
    • 2017-05-24
    • 1970-01-01
    • 2015-06-24
    • 2019-06-08
    • 2015-07-05
    • 2011-03-20
    • 1970-01-01
    • 2021-12-15
    • 2012-06-07
    相关资源
    最近更新 更多