আমার পাগল মতামত এবং কন্ট্রোলার সঙ্গে littered হয় redirect_to
, link_to
এবং form_for
পদ্ধতি কল। কখনও কখনও link_to
এবং redirect_to
তারা যে লিঙ্কগুলিতে লিখিত হয় সেগুলিতে স্পষ্ট হয় (উদাহরণস্বরূপ link_to 'New Person', new_person_path
), তবে অনেক সময় পথগুলি অন্তর্ভুক্ত থাকে (যেমন link_to 'Show', person
)।
আমি আমার মডেলটিতে কিছু একক টেবিলের উত্তরাধিকার (এসটিআই) যুক্ত করব (বলুন Employee < Person
), এবং সাবক্লাসের (উদাহরণস্বরূপ Employee
) উদাহরণের জন্য এই সমস্ত পদ্ধতি ভেঙে যায় ; যখন রেলগুলি কার্যকর করে link_to @person
, এতে ত্রুটি ঘটে undefined method employee_path' for #<#<Class:0x000001022bcd40>:0x0000010226d038>
। রেলগুলি বস্তুর শ্রেণীর নাম দ্বারা নির্ধারিত কোনও রুট সন্ধান করছে, যা কর্মচারী। এই কর্মচারী রুটগুলি সংজ্ঞায়িত করা হয়নি, এবং কোনও কর্মচারী নিয়ামক নেই যাতে ক্রিয়াগুলি সংজ্ঞায়িত হয় না।
এই প্রশ্ন আগে জিজ্ঞাসা করা হয়েছে:
- এ Stackoverflow , উত্তর আপনার সমগ্র কোডবেস মধ্যে LINK_TO ইত্যাদি প্রতিটি উদাহরণের সম্পাদনা, এবং স্পষ্টভাবে পথ রাষ্ট্র হয়
- উপর Stackoverflow আবার, দুই জনের ব্যবহার করার সুপারিশ
routes.rb
পিতা বা মাতা ক্লাসে উপশ্রেণী সম্পদগুলি (ম্যাপmap.resources :employees, :controller => 'people'
)। একই এসও প্রশ্নের শীর্ষের উত্তরটি কোডবেসে প্রতিটি উদাহরণ বস্তুকে টাইপ-কাস্টিং করার পরামর্শ দেয়.becomes
- স্ট্যাকওভারফ্লোতে আর একটি , শীর্ষ উত্তর হ'ল ডু রিপিটস ইয়োরস ক্যাম্পে এবং প্রতিটি সাবক্লাসের জন্য নকল স্ক্যাফোর্ডিং তৈরি করার পরামর্শ দেয়।
- এখানে আবার একই প্রশ্নটি এসও, যেখানে শীর্ষ উত্তরটি কেবল ভুল বলে মনে হচ্ছে (রেল ম্যাজিক জাস্ট ওয়ার্কস!)
- ওয়েবে অন্য কোথাও, আমি এই ব্লগ পোস্টটি পেয়েছি যেখানে F2Andy কোডের যে কোনও জায়গায় পাথ সম্পাদনা করার পরামর্শ দেয়।
- লজিকাল রিয়ালিটি ডিজাইনের ব্লগ পোস্টে একক টেবিল উত্তরাধিকার এবং আরএসএসএলফুল রুটগুলিতে , উপরের এসও উত্তর সংখ্যা 2 হিসাবে সাবক্লাসের সংস্থানগুলি সুপারক্লাস নিয়ামককে ম্যাপ করার পরামর্শ দেওয়া হচ্ছে।
- অ্যালেক্স রিসনার একটি পোস্ট হয়েছে পাগল মধ্যে একক ছক উত্তরাধিকার , যা তিনি পিতা বা মাতা ক্লাসে শিশু ক্লাস সম্পদ ম্যাপিং বিরুদ্ধেও সমর্থন
routes.rb
, যেহেতু যে শুধুমাত্র ক্যাচ থেকে breakages রাউটিংlink_to
এবংredirect_to
, কিন্তু না থেকেform_for
। সুতরাং তিনি পরিবর্তে সাবক্লাসগুলি তাদের ক্লাস সম্পর্কে মিথ্যা বলার জন্য অভিভাবক শ্রেণিতে একটি পদ্ধতি যুক্ত করার পরামর্শ দেন। ভাল লাগছে, তবে তার পদ্ধতিটি আমাকে ত্রুটি দিয়েছেundefined local variable or method `child' for #
।
এর জবাব হলো, সবচেয়ে মার্জিত মনে হয় এবং সবচেয়ে ঐক্যমত্য আছে (কিন্তু এটা সব না তাই যে মার্জিত, কিংবা যে অনেক ঐক্যমত্য), আপনার সম্পদ যোগ routes.rb
। বাদে এটি কাজ করে না form_for
। আমার কিছুটা স্পষ্টতা দরকার! উপরের পছন্দগুলি ছাঁটাই করার জন্য, আমার অপশনগুলি
- সুপারক্লাসের নিয়ামকটিতে সাবক্লাসের সংস্থানগুলি ম্যাপ করুন
routes.rb
(এবং আশা করি কোনও সাবক্লাসে আমাকে ফর্ম_ কল করার প্রয়োজন নেই) - ক্লাসগুলি একে অপরের সাথে মিথ্যা তৈরি করার জন্য রেলগুলি অভ্যন্তরীণ পদ্ধতিগুলিকে ওভাররাইড করুন
- কোডটিতে প্রতিটি উদাহরণ সম্পাদনা করুন যেখানে কোনও বস্তুর ক্রিয়াটির পথটি স্পষ্টভাবে বা স্পষ্টতই আহবান করা হয়েছে, হয় পাথ পরিবর্তন করা বা অবজেক্টটিকে টাইপ-কাস্টিং করা।
এই সমস্ত বিতর্কিত উত্তর সহ, আমার একটি রায় দরকার। আমার কাছে মনে হয় ভালো উত্তর নেই। এটি কি রেলের নকশায় ব্যর্থ? যদি তাই হয় তবে এটি কি কোনও বাগটি স্থির হয়ে যেতে পারে? বা যদি তা না হয় তবে আমি আশা করছি যে কেউ আমাকে সরাসরি এটির উপর ভিত্তি করে নিতে পারেন, প্রতিটি বিকল্পের উপকারিতা এবং বিভ্রান্তির মধ্য দিয়ে আমাকে চলতে পারেন (বা কেন এটি কোনও বিকল্প নয় তা ব্যাখ্যা করুন), এবং কোনটি সঠিক উত্তর এবং কেন। বা একটি সঠিক উত্তর আছে যা আমি ওয়েবে খুঁজে পাচ্ছি না?