क्या कोई साधारण ट्यूटोरियल है जो एक साधारण मॉडल को मचान करने के लिए है जो कई से अधिक रिश्तों का उपयोग करता है?रेल 3 रिलेशनल मॉडल की मचान
उत्तर
यह ट्यूट मैंने रेल 3.0.5 पर रूबी 1.9.2 का उपयोग करके चरणबद्ध नीचे चरणबद्ध चरण बनाते समय लिखा है। मैंने इस्तेमाल किए गए रत्नों के लिए 'जेमफाइल' भी देखें (पूरे टेस्टएप डाउनलोड करने योग्य, लिंक 15 में अंत में है)। तो यहाँ जाता है:
1)
rails new mynewtestapp
cd mynewtestapp
एक जगह है जहाँ आप एक परीक्षण अनुप्रयोग बनाना चाहते हैं पर जाएं, फिर
2) फिर 2 मॉडल एक has_and_belongs_to_many संघ है कि जोड़ने
rails g scaffold book title:string author:string
rails g scaffold user name:string age:integer
3) तो आपको उस asssociation के लिए जॉइन-टेबल बनाने की आवश्यकता है ... डिफ़ॉल्ट रेल के नाम से तालिका के लिए एक तालिका की तलाश होगी जिसमें दोनों अक्षरों को वर्णमाला क्रम में शामिल किया गया है ... तो ऐसी तालिका बनाने के लिए माइग्रेशन बनाएं
rails g migration createBooksUsers
4) उत्पन्न प्रवास फ़ाइल है, जो उस समय लग रहा है
class CreateBooksUsers < ActiveRecord::Migration
def self.up
end
def self.down
end
end
5) को संशोधित की तरह है कि इस
class CreateBooksUsers < ActiveRecord::Migration
def self.up
create_table :books_users, :id => false do |t|
t.integer :book_id
t.integer :user_id
end
end
def self.down
drop_table :books_users
end
end
6 तरह देखने के लिए खोलने के लिए) पुस्तक को has_and_belongs_to_many संघ जोड़ने और उपयोगकर्ता मॉडल, साथ ही संबंधों द्वारा जोड़े गए नए आईडी
ऐप/मॉडल/book.rb
class Book < ActiveRecord::Base
attr_accessible :title, :author, :user_ids
has_and_belongs_to_many :users
end
एप्लिकेशन/मॉडल/user.rb
class User < ActiveRecord::Base
attr_accessible: :name, :age, :book_ids
has_and_belongs_to_many :books
end
7) अब हमारे मॉडल और माइग्रेशन किया जाता है ... टेबल
rake db:create
rake db:migrate
बनाने (अच्छी तरह से बनाने के यदि आवश्यक हो तो नहीं हो सकता है की सुविधा देता है आप sqlite3 का उपयोग करते हैं या यदि आपने मैन्युअल रूप से उपयोग करने के लिए डेटाबेस बनाया है, तो यह उदाहरण SQLite का उपयोग करके काम करेगा, इसलिए मैंने डेटाबेस-प्रबंधन-सिस्टम स्थापित करने से संबंधित कुछ भी जोड़ा नहीं है। लेकिन जैसा कि बहुत सारे हैं और वास्तव में उपयोग करने के लिए पर्याप्त योग्य हैं, बहुत अच्छी तरह से प्रलेखित हैं, आपको उस सुंदर त्वरित के बारे में कोई मदद मिलेगी)
8) अब तय करें कि कौन सा ऑब्जेक्ट किस ऑब्जेक्ट को असाइन किया जाएगा .... आप दोनों तरीकों से ऐसा कर सकते हैं ... मैं इसे सरल रखूंगा और इसे दिखाऊंगा ... कहता है कि आपके पास केवल कुछ उपयोगकर्ता हैं और उन्हें पुस्तकों में असाइन करना चाहते हैं ...
इस बिंदु पर, मैं कहूंगा कि कुछ बाहरी मदद प्राप्त करें, जैसे बाइनरी एक्स ने सुझाव दिया ... लेकिन सादगी के लिए मैं फॉर्मेटास्टिक पर सरल_फॉर्म मणि चुनूंगा। मुझे लगता है कि हर कोई अपने पसंदीदा है ... लेकिन simple_form आप सीएसएस-स्टाइल अपनी इच्छा को पूरी उत्पादन में अधिक स्वतंत्रता देने के लिए लगता है ... इसलिए की सुविधा देता है इस बिंदु पर simple_form स्थापित करते हैं, सिर्फ
echo "gem 'simple_form', :git => 'git://github.com/plataformatec/simple_form.git'" >> Gemfile
simple_form जोड़ने के लिए करते हैं अपने Gemfile के लिए, फिर
bundle install
और अपने आवेदन के लिए सरल रूप स्थापित करें (यानीहमारी किताबों फार्म
किताबें अभी फार्म इस
एप्लिकेशन/विचारों/पुस्तकों/_form की तरह दिखना चाहिए संशोधित करने के लिए द्वारा
rails g simple_form:install
9) समय config, डिफ़ॉल्ट शैलियों और भाषा फ़ाइलें) उत्पन्न करते हैं। html.erb
01 <%= form_for(@book) do |f| %>
02 <% if @book.errors.any? %>
03 <div id="error_explanation">
04 <h2><%= pluralize(@book.errors.count, "error") %> prohibited this book from being saved:</h2>
05
06 <ul>
07 <% @book.errors.full_messages.each do |msg| %>
08 <li><%= msg %></li>
09 <% end %>
10 </ul>
11 </div>
12 <% end %>
13
14 <div class="field">
15 <%= f.label :title %><br />
16 <%= f.text_field :title %>
17 </div>
18 <div class="field">
19 <%= f.label :author %><br />
20 <%= f.text_field :author %>
21 </div>
22 <div class="actions">
23 <%= f.submit %>
24 </div>
25 <% end %>
simple_form का उपयोग करना, हम सिर्फ ऊपर कोड के कुछ जगह ले सकता है (लाइनों 1 और 14 - 24) तो पूरी फ़ाइल इस प्रकार दिखाई देगा:
0,123,01 <%= simple_form_for(@book) do |f| %>
02 <% if @book.errors.any? %>
03 <div id="error_explanation">
04 <h2><%= pluralize(@book.errors.count, "error") %> prohibited this book from being saved:</h2>
05
06 <ul>
07 <% @book.errors.full_messages.each do |msg| %>
08 <li><%= msg %></li>
09 <% end %>
10 </ul>
11 </div>
12 <% end %>
13
14 <%= f.input :title %>
15 <%= f.input :author %>
16 <%= f.association :users %>
17
18 <%= f.button :submit %>
19
20 <% end %>
10) अब आप अपने आवेदन शुरू करने के लिए
rails s
, कुछ उपयोगकर्ताओं को जोड़ने तो एक किताब जोड़ सकते हैं और चाहते हो सकता है और वहाँ अपने पहले has_and_belongs_to_many रूप है:
11) अच्छी तरह से है कि शायद अभी तक देखने के लिए सबसे खूबसूरत चीज नहीं हो सकती है, लेकिन स्टाइलशीट का एक साधारण जोड़ थोड़ा सा मदद करेगा ... एक नई फाइल बनाएं
public/stylesheets/simple_form.css
और पेस्ट इसे में निम्नलिखित लाइनों
/* public/stylesheets/simple_form.css */
.simple_form label {
float: left;
width: 100px;
text-align: right;
margin: 2px 10px;
}
.simple_form div.input {
margin-bottom: 10px;
}
.simple_form div.boolean, .simple_form input[type='submit'] {
margin-left: 120px;
}
.simple_form div.boolean label, .simple_form label.collection_radio, .simple_form label.collection_check_boxes{
float: none;
margin: 0;
}
.simple_form .error {
clear: left;
margin-left: 120px;
font-size: 12px;
color: #D00;
display: block;
}
.simple_form .hint {
clear: left;
margin-left: 120px;
font-size: 12px;
color: #555;
display: block;
font-style: italic;
}
फिर पृष्ठ पुनः लोड करके ... Tadaa ... पहले हड़ताल ...
12) और अगर आप एक से अधिक पसंद नहीं है -choice-listboxes बस वापस करने के लिए पुस्तकों के लिए फार्म
एप्लिकेशन/विचारों/पुस्तकों/_form.html.erb
जाने के लिए और संशोधित लाइन
15 <%= f.input :author %>
थोड़ा
15 <%= f.input :author, :as => :check_boxes %>
बनाने के लिए चेक-बॉक्स सूची-बॉक्स से बाहर .... लेकिन ... ewww .... इस को देखने के लिए:
13) कुछ गलत लगता है ... विकल्प के बाएं से दाएं प्रस्तुति को हर समय और फिर सरल_फॉर्म ग्रीनहोर्न को परेशान करने के लिए जाना जाता है, लेकिन वास्तव में यह समस्या को हल करने में आसान है
और उस छोटे प्रारूप के मुद्दे पर, आप भी चाहना ब्रेसिज़ में अपने नाम के पीछे उपयोगकर्ता उम्र देखते हैं, जैसे 'टॉम (25)'
... ऐसा करने की सुविधा देता है 3 त्वरित सुधार
क) टिप्पणी हटाएं और में config/initializers/simple_form.rb में 2 विकल्प सेट आदेश एक div के साथ प्रत्येक बॉक्स का रैप करने के लिए और एक fieldset के अंदर चेक बॉक्स का सेट जगह
# You can wrap a collection of radio/check boxes in a pre-defined tag, defaulting to none.
config.collection_wrapper_tag = :fieldset
# You can wrap each item in a collection of radio/check boxes with a tag, defaulting to none.
config.item_wrapper_tag = :div
ख) हमारे simple_form.css स्टाइलशीट एक छोटे से संशोधित जोड़ने के रूप में,:
fieldset { border: 0; }
...जब तक आप फ़ील्डसेट
सी) हमारे उपयोगकर्ता-मॉडल में 'to_label' विधि बनाते हैं, क्योंकि 'to_label' डिफ़ॉल्ट रूप से पहली विधि सरल_फॉर्म स्ट्रिंग- एक वस्तु प्रदर्शित करने के लिए प्रतिनिधित्व। एक अजीब घटना से हमारे मॉडल उपयोगकर्ता के पास 'नाम' नामक कॉलम है। नाम के रूप में एक मॉडल में एक तरीका सरल_फॉर्म भी दिखता है, हम भाग्यशाली थे कि इस ऐप ने अभी तक काम किया है। अगर हमने नाम कॉलम फोरनाम नाम दिया था, तो रेल ने उपयोगकर्ता नाम सूचीबद्ध नहीं किए थे, लेकिन डिफ़ॉल्ट-रूबी-ऑब्जेक्ट प्रस्तुतियां (ई। जी। < # उपयोगकर्ता: 52136 9 846>)। लगता है कि हम भाग्यशाली ;-)
एप्लिकेशन/मॉडल/user.rb थे
class User < ActiveRecord::Base
has_and_belongs_to_many :users
def to_label
"#{name} (#{age})"
end
end
और संपादित फार्म एक अच्छा रंग-रूप हो जाता है ...
14) अब केवल शो दृश्य पुस्तक मालिकों प्रदर्शित करने के लिए या तो बहुत मुश्किल की जरूरत है ... नहीं thats, बस शो-व्यू
एप्लिकेशन/विचारों/पुस्तकों/show.html.erb
खोलने के लिए और ली जोड़ने
01 <p id="notice"><%= notice %></p>
02
03 <p>
04 <b>Title:</b>
05 <%= @book.title %>
06 </p>
07
08 <p>
09 <b>Author:</b>
10 <%= @book.author %>
11 </p>
12
13 <p>
14 <b>Who owns a copy?</b>
15 <%= @book.users.map {|x| x.to_label}.join ', ' %>
16 </p>
17
18 <%= link_to 'Edit', edit_book_path(@book) %> |
19 <%= link_to 'Back', books_path %>
और पिछले नहीं बल्कि कम से कम ... शो देखने
15) ठीक है, एक त्वरित ट्यूटोरियल habtm करने के लिए या शब्दों has_and_belongs_to_many संघों में इतना: एनईएस 13-16 bookowners प्रदर्शित करने के लिए रेल में मैं अपने परीक्षण एप्लिकेशन के तहत डाल दिया है मैं जबकि में इस ऑनलाइन लेखन बनाई https://1drv.ms/u/s!Alpu50oGtUZq7AiJkL08QqBiMAjb
अच्छा लिखो! काफी गहन – Andrew
क्या यह अभी भी रेल 3.2.3 में मान्य है? मुझे लगता है कि मैंने सही तरीके से कदम उठाए हैं लेकिन चरण 11 के बाद मुझे एक त्रुटि मिल रही है (जब कोई पुस्तक बनाने की कोशिश की जा रही है) कह रही है "संरक्षित गुणों को बड़े पैमाने पर असाइन नहीं किया जा सकता")। अगर मैं इसे गलत कर रहा हूं, तो कृपया अनदेखा करें। :) – timfreilly
@ टिमफ्रेली: मैंने रेलवे 3.2.3 पर यह कोशिश नहीं की है, लेकिन "सब कुछ नया है", i। ई। रेल और सरल-रूप, मुझे लगता है कि कुछ चीजें वास्तव में अलग हैं। अफसोस की बात है कि मुझे रेल 3.1+ के साथ काम करने का अवसर नहीं मिला है, इसलिए मैं नहीं कह सकता। आपके द्वारा उल्लिखित त्रुटि संदेश को Google पर आज़माएं, मुझे यकीन है कि आपको समाधान की ओर अग्रसर लगेगा। – Ingo
घड़ी रयान बाते के टोकन फील्ड्स पर ट्यूटोरियल:
http://railscasts.com/episodes/258-token-fields
यह रेल में कई रिश्ते के लिए कई पाड़ के लिए एक आसान तरीका है
- 1. रेल 3 के लिए नेस्टेड मचान जनरेटर?
- 2. रेल 3 मॉडल
- 3. रेल 3: मॉडल
- 4. रेल 3. संबंधित मॉडल
- 5. रेल मचान बहुवचन "कैफे"
- 6. रेल: मचान द्वारा उत्पन्न मॉडल को संशोधित करना
- 7. रेल 3 सत्यापित विशिष्टता मॉडल
- 8. रेल में डिफ़ॉल्ट मचान जनरेटर को ओवरराइड करें 3
- 9. रेल 3 + JQuery-फ़ाइल-अपलोड + नेस्टेड मॉडल
- 10. तक पहुँचना मॉडल एक रेल 3 परियोजना
- 11. रेल में स्वयं संदर्भ मॉडल 3
- 12. रेल 3 मॉडल के लिए चिंता मॉड्यूल
- 13. एक रेल 3 एप्लिकेशन में दो मॉडल
- 14. रिलेशनल टेबल डेटा की प्रतिलिपि
- 15. Formtastic नेस्टेड मॉडल प्रपत्र फ़ील्ड्स (रेल 3)
- 16. एलिवेट डीबी रिलेशनल मॉडल डू और
- 17. एएसपी.नेट एमवीसी 3 और एनएचबीर्नेट मचान
- 18. जीडब्ल्यूटी मचान
- 19. डिफ़ॉल्ट मचान और निफ्टी के बीच क्या अंतर है: मचान?
- 20. पिलों में मचान
- 21. रेल पर रूबी में समग्र इकाई मचान
- 22. बेंचमार्किंग रेल मॉडल मॉडल
- 23. रेल 3: रेल
- 24. एमवीसी 3 कंट्रोलर मचान जोड़ें त्रुटि - असमर्थित संदर्भ प्रकार
- 25. RoR में मॉडल और मचान को कैसे हटाएं?
- 26. रेल मॉडल मॉडल नाम
- 27. रेल 3 -
- 28. एमवीसी 3 और एएसपी.Net इकाई फ्रेमवर्क मचान त्रुटि के साथ: कोई मॉडल कक्षाएं उपलब्ध नहीं हैं
- 29. रेल 3 ActiveRecord स्कोप
- 30. रेल 3
आपके प्रश्न को गुगल करने से मुझे यह दिया गया: http://jrhicks.net/Projects/rails/has_many_and_belongs_to_many.pdf जो मुझे आशा है कि आप – rsplak
का उपयोग कर सकते हैं जो 5.5 साल पहले लिखा गया था! मुझे संदेह है कि यह रेल 3 में काम करता है। –
आप वास्तव में क्या देख रहे हैं? कई से कई डिस्प्ले मुश्किल हो सकते हैं। मुझे नहीं लगता कि यह कुछ उत्पन्न करने के लिए व्यवहार्य होगा। –