Ich habe vier MySQL-Tabellen, die gleichzeitig mit einem Klick auf eine simple_form-Schaltfläche gefüllt werden sollten. In der Form gibt es Eingabefelder für alle vorhandenen Spalten aus den Tabellen. Die Domain-Tabelle hat keine ID für die anderen Tabellen darunter, aber alle anderen haben eine Domain-ID in ihren Tabellen. Hier sind die Abhängigkeiten:Rails: simple_form füllt mehrere verbundene Tabellen
class Domain < ActiveRecord::Base
has_many :whitelists
has_many :blacklists
has_many :product_infos
end
class Whitelist < ActiveRecord::Base
belongs_to :domain
end
class Blacklists < ActiveRecord::Base
belongs_to :domain
end
class ProductInfo < ActiveRecord::Base
belongs_to :domain
end
Mein simple_form ist in der Ansicht der Domäne gespeichert.
<%= simple_form_for @domain do |f| %>
<%= f.input :name, placeholder: 'Example Shop' %>
<%= f.input :domain, placeholder: 'http://www.example.com' %>
<h3><b>Whitelist</b></h3>
<%= f.input :url_start, as: :text %>
<%= f.input :url_end, as: :text %><br>
<h3><b>Blacklist</b></h3>
<%= f.input :url_start, as: :text %>
<%= f.input :url_end, as: :text %><br>
<h3><b>Product Information</b></h3>
<%= f.input :id_tag %>
<%= f.input :name_tag %>
<%= f.input :product_info_text_tag %><br>
<%= f.button :submit %>
<% end %>
Meine Frage ist, wie Sie auf die anderen Spalten in der Ansicht zugreifen. Alle Eingaben außer denen aus der Domäne führen zu einer Fehlermeldung (unbekannte Methode oder lokale Variable). In den Modellen war es ziemlich einfach, auf Attribute aus einer anderen Tabelle zuzugreifen, aber ich komme nicht dahinter, wie es in der Ansicht funktioniert.
Bearbeiten: Ich habe jetzt das Formular und den Domänencontroller bearbeitet. Es funktioniert jedoch immer noch nicht. Keine Fehler, aber nur die Domain-Tabelle wird gefüllt.
Domänencontroller:
def new
@domain = Domain.new
@domain.whitelists.build
@domain.blacklists.build
@domain.product_infos.build
end
private
# Use callbacks to share common setup or constraints between actions.
def set_domain
@domain = Domain.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def domain_params
params.require(:domain).permit(:whitelist_attributes => [:url_start, :url_end], :blacklist_attributes => [:url_start, :url_end], :product_info_attributes => [:id_tag, :name_tag, :promo_price_tag, :price_tag, :shipping_cost_tag, :image_url_tag, :browse_tree_tag, :product_info_text_tag])
end
Danke! Dieses Mal keine Fehlermeldungen. Es wird jedoch nur die Domain-Tabelle gefüllt. In meiner Rails Server Konsole gibt es auch keine Fehler und nur das create Domain Skript wird ausgeführt. – GoYoshi
Haben Sie 'params.require (: domain) .permit (: whitelist_attributes => [: url_start,: url_end],: blacklist_attributes ...)' zu 'domain_params' in Ihrem DomainsController hinzugefügt? – marmeladze
Jetzt habe ich es hinzugefügt, aber immer noch nur die Domain-Tabelle gefüllt. Muss ich irgendwo im Controller ein neues Whitelist/Blacklist/Product_info Objekt erstellen? – GoYoshi