繁体   English   中英

Rails 4.0.3中的嵌套表单

[英]Nested Forms in Rails 4.0.3

我在Rails 4的嵌套表单中苦苦挣扎,这是我第一次制作这种形式的表单。 我已经阅读了很多文档,但是我无法使其正常工作。 :-(

我有两个模型:人和疾病。 一个人可以患有多种疾病,而一种疾病属于一个人。 看起来很简单。 疾病表格未保存在数据库中。

人物模型:

class Person < ActiveRecord::Base
  belongs_to :user
  has_many :diseases, :dependent => :destroy #if you delete a person you also delete all diseases related
  has_many :appointments, :dependent => :destroy
  validates_presence_of :name, :email
  validates :name, :length => {:maximum => 50, :too_long => "name is too long"}
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, format: { :with => VALID_EMAIL_REGEX , message: "is invalid" }

  accepts_nested_attributes_for :diseases

end

疾病模型:

class Disease < ActiveRecord::Base
  belongs_to :person
  has_many :treatments
  validates_presence_of :name, :start
  validates :name, :length => {:maximum => 50, :too_long => "is too long, you can use the description field"}
  validate :start_must_be_before_end, :unless => [:chronical, :unfinished], :presence => true
  validates :end, :presence => true, :unless => [:chronical, :unfinished], :presence => true
  validates :description, :length => {:maximum => 5000, :too_long => "is too long"}

  def start_must_be_before_end
    if self[:end] < self[:start]
      errors.add(:start, "must be before end time")
      return false
    else
      return true
    end
  end

end

人员控制器:

  def create
    current_user
    @person = Person.new(person_params)
    @person.user_id = @current_user.id

    respond_to do |format|
      if @person.save
        format.html { redirect_to @person, notice: 'Person was successfully created.' }
        format.json { render action: 'show', status: :created, location: @person }
      else
        format.html { render action: 'new' }
        format.json { render json: @person.errors, status: :unprocessable_entity }
      end
    end
  end

def person_params
  params.require(:person).permit(:name, :surname, :gender, :birthdate, :bloodtype, :user_id, :phone, :email, diseases_attributes: [:id, :description] )
end

形成:

<%= simple_form_for @person do |f| %>

  <%= f.input :name %>
  <%= f.input :email %>

    <%= simple_fields_for :diseases do |my_disease| %>
      <%= my_disease.input :description %>
    <% end %>

  <%= f.button :submit %>
<% end %>

非常感谢你的帮助。

问题在于行<%= simple_fields_for :diseases do |my_disease| %> <%= simple_fields_for :diseases do |my_disease| %>应该是

<%= f.simple_fields_for :diseases do |my_disease| %>

这应该工作。

<%= simple_form_for @person do |f| %>

  <%= f.input :name %>
  <%= f.input :email %>

  <%= f.simple_fields_for :diseases do |my_disease| %> #here
      <%= my_disease.input :description %>
   <% end %>

  <%= f.button :submit %>
<% end %>

有关更多信息,请参见此API

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM