2011-03-31 17 views
6

मैंने सुना है कि आप रेलवे में एक मॉडल को डेटाबेस दृश्य (सामान्य रूप से एक तालिका के बजाए) में जोड़ सकते हैं और यह कि मॉडल की तालिका सामान्य रूप से उस नाम के साथ एक दृश्य बनाकर गुंबद है।किसी डेटाबेस दृश्य को रेल मॉडल से कनेक्ट करना?

मैं इस PostgreSQL 9.

साथ रेल 3.0.5 में काम करने के लिए नहीं मिल रहा है कि वहाँ कुछ मुझे याद आ रही है?

+0

"मुझे यह काम करने के लिए नहीं मिल रहा है" मतलब क्या है? त्रुटियाँ? – Zabba

+0

त्रुटि है: तालिका 'model_name_in_plural' मौजूद नहीं है। हालांकि, Viacheslav Molokov का समाधान काम करता है। – Valentin

उत्तर

9

रेल यह PostgreSQL अनुकूलक यह मॉडल है के लिए pg_views ध्यान में रखते हुए मुड़कर नहीं देखा है में।

आपको कुछ नामों के साथ विचारों का नाम देना चाहिए, आपके सामान्य मॉडल करते हैं। फ़ाइल RAILS_ROOT/config/initializers/postgresql_view_support.rb में

# -*- encoding: utf-8 -*- 

ActiveSupport.on_load(:active_record) do 
    ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do 
    def table_exists?(name) 
     return true if super 
     name   = name.to_s 
     schema, table = name.split('.', 2) 

     unless table # A table was provided without a schema 
     table = schema 
     schema = nil 
     end 

     if name =~ /^"/ # Handle quoted table names 
     table = name 
     schema = nil 
     end 

     query(<<-SQL).first[0].to_i > 0 
      SELECT COUNT(*) 
      FROM pg_views 
      WHERE viewname = '#{table.gsub(/(^"|"$)/,'')}' 
      #{schema ? "AND schemaname = '#{schema}'" : ''} 
     SQL 
    end 
    end 
end 

प्लेस इस:

आप थोड़ा हैक बना सकते हैं, यह इस समस्या को हल करने के लिए की तरह।

पीएस:

यह कोड रेल 3.0.5 के लिए है।

+1

यह काम करता है और शानदार है। धन्यवाद! –

1

मुझे लगता है कि यह बहुवचन के साथ कुछ करने के लिए हो सकता है। लेकिन अधिक जानकारी के बिना यह मुश्किल है। आपके द्वारा बनाए गए दृश्य को मॉडल का बहुवचन होना आवश्यक है।

उदाहरण के लिए।

CREATE VIEW books AS (SELECT * FROM bookshelves) 

मॉडल को पुस्तक कहा जाना चाहिए।

या तो उस या आप एक कस्टम, config में अगणनीय बहुवचन सेट कर सकते हैं/inflections.rb

+0

मैंने कोशिश की और यह मेरे लिए एक बार फिर एक और ऐप में एक तरीके से काम किया, लेकिन अब यह नहीं है। सुनिश्चित नहीं है कि यह 3.0.5 अजीबता या क्या है। सहायता के लिए धन्यवाद। –

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