liebe Kollegen Programmierer,verschachtelte Formularparameter leer? Probleme
Ich habe ein kleines Problem mit meiner verschachtelten Form in einer anderen Form .. hier ist, was ich versuche zu tun, diese aktuelle Form ist Besitzer zu current_customer hinzufügen. Aber innerhalb dieses Formulars gibt es eine geschachtelte Form, um die Telefonnummer des Besitzers in die Telefontabelle einzugeben, die von der Besitzertabelle getrennt ist - daher das verschachtelte Formular. Benutzer müssen ihren Eigentümernamen eingeben, um einen neuen Besitzer zu erstellen, aber die Telefonnummer kann später hinzugefügt werden. Die genannte Form ist wie folgt:
<%= form_for(@owner) do |f| %>
<%= f.hidden_field :customer_id, :value => params[:id] %>
<%= f.label :name %>
<%= f.text_field :name, class: 'form-control' %>
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.fields_for :telephones do |t| %>
<div class="form-group">
<%= t.hidden_field :owner_id, :value => @owner.id %>
<div class="number-type">
<%= t.label :tel, "Contact number" %>
<%= t.radio_button :numbertype, "mobile", :checked => false, :class => "numbertype mobile" %>
<%= t.label :numbertype, "Mobile", :value => "mobile" %>
<%= t.radio_button :numbertype, "land", :class => "numbertype land" %>
<%= t.label :numbertype, "Land", :value => "land" %>
</div>
<%= t.text_field :number, placeholder: "telephone number", class: 'form-control some_input' %>
<%= t.text_field :ext, placeholder: "extension", id: "extension", class: 'form-control'%>
</div>
<% end %>
<%= f.submit "Add new owner", class: "btn btn-primary" %>
Das telephone.rb Modell ist wie folgt:
class Telephone < ActiveRecord::Base
belongs_to :customer
belongs_to :owner
validates :owner_id, presence: true, allow_blank: true
validates :customer_id, presence: true, allow_blank: true
validates :numbertype, presence: true, allow_blank: true
validates :number, presence: true, allow_blank: true,
length: { in: 7..10 }, uniqueness: { scope: [:ext] },
:numericality => {:only_integer => true}
validates :ext, presence: true, allow_blank: true
end
owners_controller.rb
def create
@customer = Customer.find(params[:owner][:customer_id])
@owner = Owner.find_by(customer_id: params[:id])
if number_blank?
@owner = @customer.owners.build(owner_params)
else
@owner = @customer.owners.build(owner_with_telephone_params)
end
if @owner.save
@customer.update_attribute(:updated_at, Time.zone.now)
flash[:success] = "New owner added!"
redirect_to request.referrer
else
flash[:danger] = "no owner has been added."
redirect_to @customer
end
end
private
def owner_with_telephone_params
params.require(:owner).permit(:name, :email, :tel, telephones_attributes: [:numbertype, :number, :ext])
end
def owner_params
params.require(:owner).permit(:name, :email, :tel)
end
def number_blank?
params[:owner][:telephones_attributes][:number].blank?
end
das Problem, das ich mit meinem Code bin vor ist, dass selbst mein: nummernfeld in dieser form gefüllt ist, die nummer kann nicht in die telefontabelle eingetragen werden. Ist es so, als ob Rails mein: Nummernfeld nicht erkennen könnte? oder nicht. wenn da etwas ist was ich falsch mache? Vielen Dank für Ihre Hilfe!
Danke !!! Die Lösung, die Sie gegeben haben, hat geholfen. Ich werde versuchen und experimentieren mit dem: reject_if später. Nochmals vielen Dank für Ihren tollen Zeiger! –