আদেশের সাথে 4 টি হ্যাস_মানির জন্য 4 টি রেস-এর জন্য অবমানিত সতর্কতা


105
class RelatedList < ActiveRecord::Base
  extend Enumerize

  enumerize :list_type, in: %w(groups projects)

  belongs_to :content
  has_many :contents, :order => :position

end

আমার এই রেল অ্যাপগুলিতে এই মডেলটি রয়েছে যা আমি কনসোলে রেকর্ড তৈরি করার চেষ্টা করার সময় সতর্কতা ছুঁড়ে দেয়।

অবচয় সতর্কতা: আপনার সম্পর্কিত তালিকাতে নিম্নলিখিত বিকল্পগুলি hasহাস_মানি: বিষয়বস্তু ঘোষণাকে অবহেলা করা হয়েছে: আদেশ। পরিবর্তে স্কোপ ব্লক ব্যবহার করুন। উদাহরণস্বরূপ, নিম্নলিখিত: has_many: স্প্যাম_কমেন্টস, শর্তাবলী: {স্প্যাম: সত্য}, শ্রেণি_নাম: 'মন্তব্য' নিম্নলিখিত হিসাবে আবার লিখতে হবে: has_many: স্প্যাম_কমেন্টস, -> spam যেখানে স্প্যাম: সত্য}, শ্রেণি_নাম: 'মন্তব্য'। (/ ইউজারস / শিভাম / কোড / অরওলিল / অ্যাভার্জ / অ্যাপ / মডেলস / রিলেটেড_লিস্ট.আরবি: 7 থেকে কল করা হয়েছে)

দেখে মনে হচ্ছে রেলস 4 তে নতুন রয়েছে: মডেলগুলিতে ব্যবহারের জন্য সিনট্যাক্স অর্ডার করুন তবে আমি রেল গাইডগুলিতে নথিটি পাই না বলে মনে হচ্ছে।

উত্তর:


250

4 রেলগুলিতে, অবহিত :orderকরা হয়েছে এবং লম্বদা স্কোপ ব্লক দিয়ে প্রতিস্থাপন করা দরকার যা আপনি প্রশ্নটিতে পোস্ট করেছেন সেই সতর্কবার্তায় দেখানো হয়েছে। আরেকটি বিষয় লক্ষণীয় হ'ল এই স্কোপ ব্লকটি অন্য কোনও সংস্থার বিকল্পগুলি dependent: :destroy ইত্যাদির আগে পাস করা দরকার etc.

একবার চেষ্টা করে দেখুন:

has_many :contents, -> { order(:position) }

অর্ডার দিক, উল্লেখ করার জন্য অর্থাত পারেন ascবা desc@ জশুয়া-coady এবং @wsprujit পরামর্শ দিয়েছেন ব্যবহার করুন:

has_many :contents, -> { order 'position desc' }

বা, হ্যাশ স্টাইল ব্যবহার করে:

has_many :contents, -> { order(position: :desc) }

এর জন্য অ্যাক্টিভ রেকর্ড স্কোপেhas_many আরও রেফারেন্স ।


3
দুর্দান্ত কাজ! গাইড বা ডক্সে আমি এই জাতীয় তথ্য কোথায় পেতে পারি? আমি একটাও পাই না। ধন্যবাদ।
শঙ্করদেহে


4
আপনার যদি একাধিক অবহেলিত বিকল্প থাকে তবে কী oderএবং বলুন include? এটি: { order(:position), include(:track) }কমাতে ত্রুটি নিক্ষেপ করে।
কাকুবেই

2
-> { order(name: :asc) }
Asc

1
যদি কোনও কারণে আপনি কেবল সংগ্রহটি কিছু সময়ের জন্য অর্ডার করতে চান তবে আপনি এমনটিও করতে পারেন list.contents.order('position desc')যা সামগ্রিকভাবে আরও দক্ষ হতে পারে এবং মডেল ইন্টেসিভ হিসাবে নয় (ভোটের উত্তরে, তালিকাটি সামগ্রীটির একটি ক্ষেত্র জানে, এখানে নিয়ামক এটি জানেন )
ডার্টি হেনরি

35

অর্ডারটি কীভাবে করা যায় এবং অন্তর্ভুক্ত করা যায় তা নির্ধারণ করতে আমার কিছুটা সময় লেগেছিল, আমি শেষ পর্যন্ত দেখতে পেলাম যে আপনি সুযোগের বিবৃতিগুলিকে শৃঙ্খলাবদ্ধ করেছেন,

has_many :things, -> { includes(:stuff).order("somedate desc") }, class_name: "SomeThing"

2
এটা আমার সমস্যা ছিল। পিতা-মাতার গুণাবলী দ্বারা কীভাবে একটি হ্যাসম্যানের সম্পর্ককে অর্ডার করতে হবে তা জানার চেষ্টা করা হচ্ছে। বুঝতে পারিনি যে আপনি এটি করতে পারেন এবং এর পরে অর্ডার করতে পারেন। ধন্যবাদ!
টিমোথিয়াশা

27

কেবল ভেবেছি আমি যুক্ত করব যে আপনার কাছে যদি কোনও বিকল্পের হ্যাশ যুক্তি থাকে তবে তাদের ল্যাম্বদার পিছনে যেতে হবে:

has_many :things, -> { order :stuff }, dependent: :destroy

এটি নিজে নিজে বের করার জন্য আমাকে এক মিনিট সময় নিয়েছিল - আশা করি এটি অন্য যে কেউ এই সমস্যাটিতে একই সমস্যা আসার জন্য সহায়তা করে।


3
এটি "মাধ্যমে" সংস্থাগুলির ক্ষেত্রেও সত্য যা অবজেক্টটিতে বিদ্যমান থাকতে পারে -has_many :items, -> { order 'name' }, through: :suppliers
মেজর মেজর

0

এটি আমার জন্য রেল 4 এবং মঙ্গোডিবিতে কাজ করে

has_many :discounts, order: :min_amount.asc

-4

বিকল্পভাবে, আপনি orderমডেলটিতে ক্লজটি রাখতে পারেন , উদাহরণস্বরূপ:

has_many :options, order: 'name' # In class Answer

হয়ে

has_many :options # In class Answer

default_scope { order 'name' } # In class Option

পিএস: আমি ArgumentError: wrong number of arguments (1 for 0)যখন পেয়েছিলাম has_many :things, -> {}


4
ডিফল্ট সুযোগ ব্যবহার করবেন না। আপনি যদি এটি করতে ব্যবহার করেন তবে আপনি সেই যাদু পদ্ধতিতে আরও যুক্তি যুক্ত করতে পারেন। ভবিষ্যতে এটিকে ওভাররাইড করা শক্ত।
গ্রজেগোর্স zuszczek
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.