2011-09-24 10 views
6

का उपयोग करके सेट नहीं हो रहा है जब मैं एक बच्चे की टिप्पणी के साथ एक नई जांच बनाने के लिए एक फॉर्म पोस्ट करता हूं (ऐप में, पूछताछ में कई टिप्पणियां हो सकती हैं), टिप्पणी नहीं बनाई जा रही है। उपस्थिति सत्यापन को हटाते समय यह काम करता है। तो इसे उस क्रम के साथ करना है जिसमें चीजें बनाई और सहेजी गई हैं। सत्यापन को संरक्षित कैसे करें और कोड को साफ रखें?एसोसिएशन आईडी accepts_nested_attributes_for और decent_exposure

मॉडल/inquiry.rb

class Inquiry < ActiveRecord::Base 
    has_many :comments 
    accepts_nested_attributes_for :comments 

मॉडल/comment.rb

class Comment < ActiveRecord::Base 
    belongs_to :inquiry 
    belongs_to :user 
    validates_presence_of :user_id, :inquiry_id 

नियंत्रकों/inquiry_controller (निम्नलिखित एक उदाहरण तो यह वास्तव में runable नहीं किया जा सकता है)। आरबी

expose(:inquiries) 
expose(:inquiry) 

def new 
    inquiry.comments.build :user => current_user 
end 

def create 
    # inquiry.save => false 
    # inquiry.valid? => false 
    # inquiry.errors => {:"comments.inquiry_id"=>["can't be blank"]} 
end 

विचारों/पूछताछ/new.html.haml

= simple_form_for inquiry do |f| 
    = f.simple_fields_for :comments do |c| 
    = c.hidden_field :user_id 
    = c.input :body, :label => 'Comment' 
= f.button :submit 

डेटाबेस स्कीमा

create_table "inquiries", :force => true do |t| 
    t.string "state" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 
create_table "comments", :force => true do |t| 
    t.integer "inquiry_id" 
    t.integer "user_id" 
    t.text  "body" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 
+0

कृपया इन तालिकाओं को बनाने वाले माइग्रेशन दिखाएं, या अगर माइग्रेशन के माध्यम से नहीं बनाया गया है तो कृपया डेटाबेस का वर्णन दिखाएं। –

+0

अच्छी तरह से मैंने schema.rb का एक निकास जोड़ा – linojon

उत्तर

1

मूल रूप से, आप भी inquiry_id की उपस्थिति, जांच करने के लिए टिप्पणी से लौटने संघ, कि नहीं किया जा सकता का परीक्षण कर रहे सहेजने से पहले जब तक टिप्पणी सहेजी नहीं जाती है तब तक सेट करें। इस लक्ष्य को हासिल करने के लिए और अभी भी अपने सत्यापन बरकरार है एक वैकल्पिक तरीका होगा निम्नलिखित:

comment = Comment.new({:user => current_user, :body => params[:body] 
comment.inquiry = inquiry 
comment.save! 
inquiry.comments << comment 
inquiry.save! 

या एक वैकल्पिक तरीका होगा

= simple_form_for inquiry do |f| 
    = f.simple_fields_for :comments do |c| 
    = c.hidden_field :user_id 
    = c.hidden_field :inquiry_id, inquiry.id 
    = c.input :body, :label => 'Comment' 
= f.button :submit 

मूल रूप से अपनी टिप्पणी के रूप में निम्न पंक्ति जोड़कर

= c.hidden_field :inquiry_id, inquiry.id 
संबंधित मुद्दे