রেলস: দুটি কলামের স্বতন্ত্রতার বৈধতা (একসাথে)


130

আমার কাছে একটি Releaseমডেল mediumএবং countryকলাম রয়েছে (অন্যদের মধ্যে)। releasesসেই ভাগটি অভিন্ন medium/ countryসংমিশ্রণে হওয়া উচিত নয় ।

আমি কীভাবে এটি রেলের বৈধতা হিসাবে লিখব?


8
কারাগারের সম্ভাব্য সদৃশ : একাধিক কলামের স্বতন্ত্রতা
বৈধতা দিন

উত্তর:


230

আপনি বিকল্পটির সাথে স্বতন্ত্রতার বৈধতা ব্যবহার করতে পারেন scope

এছাড়াও, লেখার আগে একই সময়ে যাচাই করার সময় নতুন রেকর্ডগুলি বৈধতাগুলি পাস করতে বাধা দিতে আপনার ডিবিতে একটি অনন্য সূচক যুক্ত করা উচিত:

class AddUniqueIndexToReleases < ActiveRecord::Migration
  def change
    add_index :releases, [:country, :medium], unique: true
  end
end



class Release < ActiveRecord::Base
  validates :country, uniqueness: { scope: :medium }
end

সূচকের জন্য +1, তবে uniqueএটি স্বীকৃত না হওয়ায় -1 সেই অংশের জন্য আমি নীচের উত্তরটি ব্যবহার করেছি।
আলেক্স

7
হ্যাঁ, দুঃখিত, বৈধতা কীটি হওয়া উচিত uniqueness, না unique। লিঙ্কযুক্ত ডকুমেন্টেশন দেখুন। উত্তর ঠিক করা।
টমপভে

1
এইচএম, দুর্দান্ত, ধন্যবাদ :) নিজেকে পুনরাবৃত্তি করার জন্য - সূচকটি স্থাপন করা সমাধানটি পরবর্তী স্তরে নিয়ে আসে, এবং এই উত্তরটি সন্ধানের আগে আমি যে অন্যান্য "কোডিং" সমাধানগুলি চালিয়ে যাচ্ছি তার মতো নয়। +1 এর জন্য
আলেক্স

70

উপরের সমস্ত উত্তরগুলি কীভাবে কোনও মডেলটিতে একাধিক বৈশিষ্ট্যের স্বাতন্ত্র্যকে বৈধতা দেওয়া যায় তা অনুপস্থিত। নীচের কোডটি কীভাবে একটি সুযোগে একাধিক বৈশিষ্ট্য ব্যবহার করতে হবে তা জানাতে চায়।

validates :country, uniqueness: { scope: [:medium, :another_medium] }

এটা তোলে স্বতন্ত্রতা যাচাই countryমান সঙ্গে সব সারিতে mediumএবং another_medium

দ্রষ্টব্য: উপরের কলামে একটি সূচক যুক্ত করতে ভুলবেন না, এটি দ্রুত পুনরুদ্ধারের বীমা করে এবং অনন্য রেকর্ডের জন্য একটি ডিবি স্তরের বৈধতা যুক্ত করে।

আপডেট: টেবিল তৈরি করার সময় একটি সূচক যুক্ত করার জন্য

t.index [:medium, :another_medium], unique: true

41

আপনি :scopeআপনার ভ্যালিডেটরের কাছে এই জাতীয় প্যারামিটারটি পাস করতে পারেন :

validates_uniqueness_of :medium, scope: :country

আরও কিছু উদাহরণের জন্য ডকুমেন্টেশন দেখুন ।


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