অ্যাক্টিভেকর্ড কেবল নির্বাচিত কলামগুলি সন্ধান করে এবং তা ফিরিয়ে দেয়


91

সম্পাদনা 2

আপনি যদি এটিকে হোঁচট খেয়ে যান তবে উভয় উত্তর চেক করুন কারণ আমি এখন এটির জন্য ব্যবহার করব uck


আমার কাছে মোটামুটি বড় কাস্টম ডেটাসেট রয়েছে যা আমি জসন হিসাবে প্রতিধ্বনিত হয়ে ফিরে যেতে চাই। একটি অংশ হ'ল:

l=Location.find(row.id)
tmp[row.id]=l

তবে আমি এর মতো কিছু করতে চাই:

l=Location.find(row.id).select("name, website, city")
tmp[row.id]=l

তবে এটি কাজ করছে বলে মনে হচ্ছে না। আমি কীভাবে এটি কাজ করব?

ধন্যবাদ


বিকল্পভাবে 1 সম্পাদনা করুন , এমন কোনও উপায় আছে যা আমি কেবলমাত্র অন্তর্ভুক্ত করতে চাই এমন বৈশিষ্ট্যের একটি অ্যারে পাস করতে পারি?

উত্তর:


87

কারাগারে 2

l = Location.find(:id => id, :select => "name, website, city", :limit => 1)

... বা ...

l = Location.find_by_sql(:conditions => ["SELECT name, website, city FROM locations WHERE id = ? LIMIT 1", id])

এই রেফারেন্স ডকটি আপনাকে .findকীভাবে সংখ্যা, আইডি বা অন্য কোনও স্বেচ্ছাসৈনিক কলাম / সীমাবদ্ধতার দ্বারা সীমাবদ্ধ করবেন সেগুলি সহ আপনি ব্যবহার করতে পারেন এমন বিকল্পগুলির পুরো তালিকা দেয় ।

রেল 3 ডাব্লু / অ্যাক্টিভেকর্ড ক্যোয়ারী ইন্টারফেসে

l = Location.where(["id = ?", id]).select("name, website, city").first

রেফ: সক্রিয় রেকর্ড ক্যোয়ারী ইন্টারফেস

আপনি এই চেইন কলগুলির ক্রমও অদলবদল করতে পারেন, করছেন .select(...).where(...).first- এই সমস্ত কলগুলি এসকিউএল কোয়েরিটি তৈরি করে এবং তারপরে এটি প্রেরণ করে।


তবে আমি কেবল একটি একক দৃষ্টিকোণ চাই সবগুলি নয়
২৩

আমি আমার উত্তর সম্পাদনা করেছি। আপনি যা চান তার উপর নির্ভর করে এটি করা :limitউচিত, বা :firstবা :lastযাই হোক না কেন। আমি যে রেফারেন্স ডকুমেন্টের সাথে লিঙ্ক করেছি তা আপনাকে কীভাবে তা করতে হবে তা বলবে।
জেফ্লান্ট

রেল 3 এ কীভাবে সমতুল্য ক্যোয়ারী করবেন তা অন্তর্ভুক্ত করার জন্য আপডেট করা হয়েছে
জেফ্লান্ট

206

প্লাক (কলামের নাম)

এই পদ্ধতিটি একটি একক কলাম দ্বারা ডায়রেক্ট এসকিউএল কোয়েরি হিসাবে নির্বাচিত সঞ্চালনের জন্য ডিজাইন করা হয়েছে নির্দিষ্ট কলামের নামের মান সহ অ্যারে রিটার্ন করে মানগুলিতে কলামের মতো একই ডেটা টাইপ থাকে।

উদাহরণ:

Person.pluck(:id) # SELECT people.id FROM people
Person.uniq.pluck(:role) # SELECT DISTINCT role FROM people
Person.where(:confirmed => true).limit(5).pluck(:id)

দেখতে http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck

এর প্রবর্তিত রেলগুলি 3.2 এর পরে এবং কেবলমাত্র একক কলাম গ্রহণ করে। রেল 4 এ এটি একাধিক কলাম গ্রহণ করে


4
ঠিক আছে, একাধিক কলাম সহ উত্তেজনা দুর্দান্ত .. কেবলমাত্র এই উত্তরটি শিখেছি। 3 টি কড়ির যদিও স্বীকৃত উত্তর প্রয়োজন।
জে শেফার্ড

স্বীকৃত উত্তর হ'ল সঠিক কারণ তত্পরতা তখন উপলব্ধ ছিল না।
prasad.surase 6:49

User.pluck (: ইমেল: ID) "ব্যবহারকারীর" "ইমেল", "ব্যবহারকারী" "ID" নির্বাচন "ব্যবহারকারী"
Pranav Prashant

4
Model.uniq এখন Model.distinct (কমপক্ষে 5 রেলগুলিতে)।
mrturtle

দেখে মনে হচ্ছে আপনি রেলপথের মধ্যে নিম্নলিখিতটি করতে পারেন 3.2: Location.select([:name, :website, :city])আপনি যদি এটি কোনও অ্যারে পাস করেন
সিটিএস_এইই

27

আমার উত্তরটি বেশ দেরিতে আসে কারণ আমি বেশ নতুন বিকাশকারী। এটিই আপনি করতে পারেন:

Location.select(:name, :website, :city).find(row.id)

বিটিডব্লিউ, এটি রেলস 4


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