2012-05-14 19 views
5

मैं एक नया उत्पाद बनाने के लिए रेल का उपयोग कर रहा हूं और प्रत्येक उत्पाद में एक श्रेणी जोड़ना चाहता हूं।रेल नेस्टेड गुण - नए उत्पाद में श्रेणी विशेषता जोड़ने के लिए कैसे?

मेरे पास तीन टेबल हैं: उत्पाद, श्रेणी और वर्गीकरण (जो उत्पादों और श्रेणियों के बीच संबंधों को संग्रहीत करता है)। मैं वर्गीकरण के निर्माण को प्रबंधित करने के लिए नेस्टेड विशेषताओं का उपयोग करने की कोशिश कर रहा हूं, लेकिन यह सुनिश्चित नहीं करता कि मेरा नियंत्रक और दृश्य/फ़ॉर्म कैसे अपडेट किया जाना चाहिए ताकि नए उत्पाद वर्गीकरण तालिका को भी अपडेट कर सकें।

class Product < ActiveRecord::Base 
belongs_to :users 
has_many :categorizations 
has_many :categories, :through => :categorizations 
has_attached_file :photo 
accepts_nested_attributes_for :categorizations, allow_destroy: true 

attr_accessible :description, :name, :price, :photo 

validates :user_id, presence: true 

end 


class Category < ActiveRecord::Base 
attr_accessible :description, :name, :parent_id 
acts_as_tree 
has_many :categorizations, dependent: :destroy 
has_many :products, :through => :categorizations 

end 


class Categorization < ActiveRecord::Base 
    belongs_to :category 
    belongs_to :product 
    attr_accessible :category_id, :created_at, :position, :product_id 

end 

यह मेरा नया उत्पाद नियंत्रक है::

<%= form_for @product, :html => { :multipart => true } do |f| %> 
    <% if @product.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@product.errors.count, "error") %> prohibited this product from being saved:</h2> 

     <ul> 
     <% @product.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :description %><br /> 
    <%= f.text_field :description %> 
    </div> 
    <div class="field"> 
    <%= f.label :price %><br /> 
    <%= f.number_field :price %> 
    </div> 
<div class="field"> 
<%= f.file_field :photo %> 
</div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

मैं अपने नियंत्रक अद्यतन करना चाहिए कैसे:

def new 
    @product = Product.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @product } 
    end 
    end 

और यहाँ मेरे विचार रूप है

यहाँ मेरी मॉडल हैं ताकि जब कोई नया उत्पाद जोड़ा जाए तो उत्पाद और वर्गीकरण तालिका दोनों अपडेट हो जाएंगे? मैं अपनी व्यू फ़ाइल को कैसे अपडेट करूं ताकि श्रेणियां ड्रॉप डाउन मेनू में दिखाई दें?

+0

* लेकिन अनिश्चित कैसे मेरे ... देखें/फॉर्म अपडेट किया जाना चाहिए * - हमें यह भी पता नहीं है कि आपने उन्हें बेनकाब नहीं किया था। – jdoe

+0

हाय @jdoe - मैंने यहां व्यू फ़ाइल जोड़ा। रेल द्वारा बनाई गई मानक एक कमांड उत्पन्न करती है। –

उत्तर

4

मुझे लगता है कि उस उत्पाद में कई श्रेणियां हैं। यह स्वाभाविक रूप से उपयोगकर्ता को उत्पाद निर्माण/संस्करण पर निर्दिष्ट करने की अनुमति देने के लिए है। एक दृष्टिकोण का वर्णन here (आपके उत्पाद में श्रेणियां असाइन करने के लिए चेकबॉक्स के माध्यम से) किया गया है। एक और तरीका है: के रूप में आम तौर पर उत्पाद बनाने और उसके संपादन पृष्ठ पर जोड़ने/हटाने के श्रेणियों की तरह, अनुमति देते हैं:

cat_1 [+] 
cat_2 [-] 
cat_3 [+] 

इसके अलावा एक और अधिक सुंदर तरीके पर यह करने के लिए this one की तरह, Railcasts पर एक नज़र डालें।

0

सबसे पहले लटकती श्रेणी में दिखाने के लिए निम्नलिखित की तरह दृश्य फ़ाइल उपयोग में कुछ श्रेणियों को दिखाने के लिए

<%= select_tag("category_id[]", options_for_select(Category.find(:all).collect { |cat| [cat.category_name, cat.id] }, @product.category.collect { |cat| cat.id}))%> 

तब में उत्पाद नियंत्रक की विधि बना सकता हूँ निम्नलिखित की तरह कुछ

@product = Product.create(params[:category]) 
@product.category = Category.find(params[:category_id]) if params[:category_id] 

मैं इस आशा आपकी मदद करेगा
धन्यवाद।

0

RailsCasts से नेस्टेड मॉडल फॉर्म के लिए ट्यूटोरियल शायद आपकी मदद कर सकता है, या शायद यह किसी और की मदद करेगा।

0

यहाँ क्या मैं अपने उत्पाद को देखने फाइल करने के लिए addded, _form.html में है - यह कई चेक बॉक्स है कि मैं उत्पाद प्रति कई श्रेणियों का चयन करने के इस्तेमाल कर सकते हैं बनाया:

</div class="field"> 
<% Category.all.each do |category| %> 
<%= check_box_tag "product[category_ids][]", category.id %> 
<%= label_tag dom_id(category), category.name %><br> 
<% end %>