簡體   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