2017-02-14 3 views
0

Ich versuche, E-Commerce-Shop mit RoR zu machen. Die meisten der benötigten Funktionen habe ich ohne Probleme erledigt, aber jetzt brauche ich wirklich jemandes Hilfe hier.Schienen erstellen dynamische Attribute

Ich möchte Produktattribute, wie eine "Größe", "Gewicht", "Farbe", etc. Am einfachsten ist es, diese Attribute in Modell Migration zu definieren, aber jetzt möchte ich Attribute dynamisch machen. Das Hauptproblem besteht darin, dass ich beim Erstellen eines Produkts nicht alle Parameter mit Attributen aus Formularen abrufen kann.

Produkte/new.html.erb

<%= form_for @product, url: admin_products_path(@product) do |f| %> 
    <%= f.label :name, 'Name' %> 
    <%= f.text_field :name, class: "form-control" %> 
    <%= text_field_tag "product[product_feature][]" %> 
    <%= text_field_tag "product[product_feature][]" %> 
    <%= f.submit "Submit" %> 
<% end %> 

Also, ich möchte viele Felder mit Attributnamen und -wert, füllen Sie sie und verwenden Sie diese params in der Steuerung erzeugen, um sie zu Interate und schließlich erstellen Produkteigenschaften.

Wie

params[:product_features].each do |k, v| 
    ProductFeature.create(name: k, value: v, product_id: product_id) 
end 

Alle Edelsteine, die mit dynamischen Attributen manipulieren können, sind nicht mit Rails arbeiten 5+, also muss ich Lösung für dieses Problem finden.

Ich habe sogar arbeiten einfache db-Lösung für diese, aber es ist unbequem, params zu erstellen. Hier ist es.

Product.rb

class Product < ApplicationRecord 
    has_many :product_features 
    has_many :features, :through => :product_features 
end 

ProductFeature.rb

class ProductFeature < ApplicationRecord 
    belongs_to :product 
    belongs_to :feature 
end 

Feature.rb

class Feature < ApplicationRecord 
end 
+0

Klingt für mich wie ein verschachteltes Attribut dieses Problem lösen kann http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ ClassMethods.html –

Antwort

-1

Heres eine schnelle Beispiel fand ich

class Product 
     belongs_to :collection 
    end 

    class Collection 
     has_many :products 
    end 

und dann Ihrer Meinung nach so etwas wie diese

<%= collection_select(:product, :collection_id, Collection.all, :id, :name) %> 
Verwandte Themen