উপনামের নাম সহ রেলগুলি হ্যাশ_মনি


186

আমার ব্যবহারকারী মডেলটিতে আমি থাকতে পারি:

has_many :tasks

এবং আমার টাস্ক মডেলে:

belongs_to :user

তারপরে, ধরুন, বিদেশী কী 'ইউজার_আইডি' কার্য সারণীতে সংরক্ষণ করা হয়েছে, আমি এটি ব্যবহার করতে পারি:

@user.tasks

আমার প্রশ্ন হ'ল আমি কীভাবে has_many সম্পর্কটিকে এমনভাবে ঘোষণা করব যে আমি কোনও ব্যবহারকারীর টাস্কগুলিকে উল্লেখ করতে পারি:

@user.jobs

... বা ...

@user.foobars

একটি গাদা ধন্যবাদ।


7
আমি টাস্ক একটি বর্গ নামের ব্যবহারের ক্লান্ত হতে চাই - এটি একটি পাগল সংরক্ষিত শব্দ এবং রাস্তা নিচে অদ্ভুত সমস্যা পারে: reservedwords.herokuapp.com
জশুয়া পিন্টার

উত্তর:


361

এটি একটি শট দিন:

has_many :jobs, foreign_key: "user_id", class_name: "Task"

দ্রষ্টব্য, এটি বহুবর্ষীয় সমিতিগুলির:as জন্য ব্যবহৃত হয় ।


1
বিদেশী কীটিও অন্তর্ভুক্ত করার জন্য আপনাকে ধন্যবাদ - আমার অনুরূপ তবে ভিন্ন সমস্যা সমাধান করেছেন।
নীলস অ্যাবিল্ডগার্ড

4
এটার জন্য কি টাস্ক পক্ষের বিশেষ কিছু দরকার বা যথারীতি belongs_toযথেষ্ট?
উজ্জ্বল-তারা

1
অবগতির জন্য: এই এছাড়াও has_and_belongs_to_many সমিতির কেবল "foreign_key" টুকরা জন্য কোন প্রয়োজন কাজ করে,
ডেভিড মরটিজ

55

আপনি alias_attributeযদি এখনও তাদের কাজের হিসাবেও উল্লেখ করতে সক্ষম হন তবে আপনি এটি ব্যবহার করতে পারেন:

class User < ActiveRecord::Base
  alias_attribute :jobs, :tasks

  has_many :tasks
end

3

@ স্যামস্যাফ্রন এর উত্তর সম্পূর্ণ করতে:

আপনি class_nameহয় foreign_keyবা সাথে ব্যবহার করতে পারেন inverse_of। আমি ব্যক্তিগতভাবে আরও বিমূর্ত ঘোষণাটি পছন্দ করি তবে এটি কেবল স্বাদের বিষয়:

class BlogPost
  has_many :images, class_name: "BlogPostImage", inverse_of: :blog_post  
end

এবং আপনার belongs_toচাইল্ড মডেলের বৈশিষ্ট্যটি অবশ্যই রয়েছে তা নিশ্চিত করতে হবে :

class BlogPostImage
  belongs_to :blog_post
end

0

যদি আপনি has_many এর মাধ্যমে ব্যবহার করেন এবং উপনামটি চান:

has_many :alias_name, through: model_name, source: initial_name

-61

আপনি এই দুটি ভিন্ন উপায়ে করতে পারেন। একটি "হিসাবে" ব্যবহার করে হয়

has_many :tasks, :as => :jobs

অথবা

def jobs
     self.tasks
end

স্পষ্টতই প্রথমটি হ'ল এটি পরিচালনা করার সেরা উপায় way


ধন্যবাদ, এটি নিখুঁত শোনাচ্ছে। দুর্ভাগ্যক্রমে এটি কার্যকর হয়নি: ব্যবহারকারী মোডেল: has_many: Tasks,: as =>: created_tasks নিয়ন্ত্রণ: @created_tasks = @ user.created_tasks ----- টাস্ককন্ট্রোলারে #MododError # সূচী অপরিবর্তিত পদ্ধতি `নির্মিত_টাস্ক '# ব্যবহারকারীর জন্য: 0xb6050c5>
ডক্টরেঞ্জ করুন

4
দ্বিতীয় পদ্ধতিটি আসলে অ্যাসোসিয়েশনের একটি উপাধি তৈরির জন্য বেশ কার্যকর।
jpgeek

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