2011-09-02 19 views
5

मैं रेल 3.1 का उपयोग कर रहा हूं और एक चर्चा मंच पर काम कर रहा हूं। मेरे पास Topic नामक एक मॉडल है, जिनमें से प्रत्येक में Post एस है। जब उपयोगकर्ता एक नया विषय बनाता है, तो उन्हें पहले Post भी बनाना चाहिए। हालांकि, मुझे यकीन नहीं है कि मैं इसे एक ही रूप में कैसे कर सकता हूं। यहां मेरा कोड है:रेल 3.1 में एक ही रूप में एकाधिक मॉडल?

<%= form_for @topic do |f| %> 
<p> 
    <%= f.label :title, "Title" %><br /> 
    <%= f.text_field :title %> 
</p> 

<%= f.fields_for :post do |ff| %> 
    <p> 
     <%= ff.label :body, "Body" %><br /> 
     <%= ff.text_area :body %> 
    </p> 
<% end %> 

<p> 
    <%= f.submit "Create Topic" %> 
</p> 
<% end %> 

class Topic < ActiveRecord::Base 
    has_many :posts, :dependent => :destroy 
    accepts_nested_attributes_for :posts 
    validates_presence_of :title 
end 


class Post < ActiveRecord::Base 
    belongs_to :topic 
    validates_presence_of :body 
end 

... लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। कोई विचार?

धन्यवाद!

उत्तर

6

@ पाब्लो के जवाब में आपको जो भी चाहिए वह प्रतीत होता है। लेकिन फिर अपने Topic नियंत्रक में इस

def new 
    @topic = Topic.new 
    @topic.posts.build 
end 

जोड़ने अधिक विशिष्ट ...

पहले परिवर्तन इस

<%= f.fields_for :posts do |ff| %> # :posts instead of :post 

करने से

<%= f.fields_for :post do |ff| %> 

अपने ध्यान में रखते हुए इस लाइन आपको जाना चाहिए।

+0

+1। – Joseph

3

रयान बेट्स here और here

से एक बहुत अच्छी व्याख्या अपने विशेष मामले के लिए: (: पोस्ट), के बजाय एक संघ (: पदों) जब आप fields_for फोन आप एक मॉडल का उपयोग कर रहे हैं।

<%= ... %> के उचित उपयोग की भी जांच करें। रेल में 3.x निर्माण के बहावौर बदल गए। ब्लॉक हेल्पर्स (form_for, fields_for, आदि) की आवश्यकता नहीं है, और इनलाइन हेल्पर्स (text_field, text_area, आदि) की आवश्यकता है।

+0

लिंक के लिए धन्यवाद, लेकिन मैं अपने प्रश्न के लिए कुछ विशिष्ट खोज रहा था। वास्तविक उदाहरण के लिए – jasonbogd

संबंधित मुद्दे