Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails中聚合属性组合的简单表单自定义输入_Ruby On Rails 3_Activerecord_Simple Form - Fatal编程技术网

Ruby on rails 3 Rails中聚合属性组合的简单表单自定义输入

Ruby on rails 3 Rails中聚合属性组合的简单表单自定义输入,ruby-on-rails-3,activerecord,simple-form,Ruby On Rails 3,Activerecord,Simple Form,我正在尝试为一个Rails 3模型的简单表单gem编写一个自定义输入,该模型有一个composited\u of aggregate属性。请参见下面的示例 我尝试为使用字段,但它会生成参数,如“person”=>{“name”=>{“fname”=>“James”,“middle”=>“T”,“lname”=>“Kirk”},而person不会处理这些参数。创建或像关联一样更新属性 给出以下错误 undefined method `fname' for {"fname"=>"James",

我正在尝试为一个Rails 3模型的简单表单gem编写一个自定义输入,该模型有一个composited\u of aggregate属性。请参见下面的示例

我尝试为使用字段,但它会生成参数,如
“person”=>{“name”=>{“fname”=>“James”,“middle”=>“T”,“lname”=>“Kirk”}
,而
person不会处理这些参数。创建
或像关联一样更新属性

给出以下错误

undefined method `fname' for {"fname"=>"James", "middle"=>"T", "lname"=>"Kirk"}:ActiveSupport::HashWithIndifferentAccess
您将如何实现这一点

范例

$ rails g scaffold person last_name:string first_name:string middle_name:string
lib/fullname.rb

class Fullname
  attr_reader :fname, :middle, :lname

  def initialize(fname, middle, lname)
    @fname, @middle, @lname = fname, middle, lname
  end
end    
app/models/person.rb

class Person < ActiveRecord::Base
  composed_of :name, 
              :class_name => 'Fullname', 
              :mapping => 
              [ # database      # Fullname
                [:first_name,   :fname], 
                [:middle_name,  :middle], 
                [:last_name,    :lname]
              ],
              :allow_nil => true
end
app/inputs/fullname_input.rb

class FullnameInput < SimpleForm::Inputs::Base
  def input
    @builder.simple_fields_for attribute_name, :validate => false do |form|
      [   'First:', form.input_field(:fname, :size => 10),
          'Middle:', form.input_field(:middle, :size => 5),
          'Last:', form.input_field(:lname, :size => 10)
      ].join(' ').html_safe
    end
  end
end
class FullnameInputfalse do | form|
['First:',form.input_字段(:fname,:size=>10),
“Middle:”,form.input_字段(:Middle,:size=>5),
“Last:”,form.input_字段(:lname,:size=>10)
].join(“”).html\u安全
结束
结束
结束
class FullnameInput < SimpleForm::Inputs::Base
  def input
    @builder.simple_fields_for attribute_name, :validate => false do |form|
      [   'First:', form.input_field(:fname, :size => 10),
          'Middle:', form.input_field(:middle, :size => 5),
          'Last:', form.input_field(:lname, :size => 10)
      ].join(' ').html_safe
    end
  end
end