কিভাবে দুই scopes সঙ্গে OR সংযুক্ত করা হয়

আমার একটি ট্যাগ ফিড এবং একটি বন্ধু ফিড আছে। আমি এই দুইটি একত্রিত করতে চাই এবং চূড়ান্ত "সব" ফিড তৈরি করি।

বন্ধু ফিডের জন্য:

class Post < ActiveRecord::Base
  scope :friendfeed, lambda{|x| followed_by}

  def self.followed_by(user)
    where("user_id IN (?) OR user_id = ?", user.watched_ids, user.id)
  end
end

ট্যাগ ফিডের জন্য:

class Post < ActiveRecord::Base
  scope :tagfeed, lambda{|x| infatuated_with}

  def self.infatuated_with(user)
    joins(:attachments).where("attachments.tag_id IN (?)", user.tags).select("DISTINCT pages.*")
  end
end

এবং আমি কন্ট্রোলার থেকে এই মত কিছু কল করবে (আমি পৃষ্ঠাঙ্কন জন্য Kaminari জহর ব্যবহার করছি):

@tag_feed = Post.tagfeed(current_user).page(params[:page]).per(21)
@friend_feed = Post.friendfeed(current_user).page(params[:page]).per(21)

এখন আমি একটি সার্বজনীন খাদ্য আছে চান, কিন্তু আমি হারিয়ে করছি Scopes নিচে সংকুচিত জন্য বোঝানো হয়, কিন্তু এই ক্ষেত্রে আমি একটি OR অপারেশন করতে চেষ্টা করছি। স্টাফ মত ভালো করছেন

@mother_of_all_feed = @tag_feed + @friend_feed

অপ্রয়োজনীয় হবে, এবং আমি একক পৃষ্ঠাতে উপস্থিত পোস্টগুলির সংখ্যা নিয়ন্ত্রণ করতে সক্ষম হব না। আমি কিভাবে এই সম্পর্কে যেতে পারেন? ধন্যবাদ!

উপায় দ্বারা, ট্যাগের জন্য আমি এই ধরনের সেট আপ অ্যাসোসিয়েশন আছে:

class Post < ActiveRecord::Base
  has_many :attachments
  has_many :tags, :through => :attachments
end

class Tag < ActiveRecord::Base
  has_many :attachments
  has_many :posts, :through => :attachments
end

class Attachment < ActiveRecord::Base
  belongs_to :tag
  belongs_to :post
end
0

2 উত্তর

এই বৈশিষ্ট্যটির জন্য একটি পলকে অনুরোধটি খোলার আছে ( https://github.com/rails/rails/pull/ 9052 ), কিন্তু এই সময়ে, কেউ কেউ একটি বানর প্যাচ তৈরি করেছে যা আপনি আপনার প্রাথমিককারিতে অন্তর্ভুক্ত করতে পারেন যা আপনাকে বা স্কোপগুলি এবং এক ক্যোয়ারিতে ক্লজগুলি এবং আপনাকে একটি ActiveRecord :: রিলেশন </কোড>:

https://gist.github.com/j-mcnally/250eaaceef234dd8971b

যে সঙ্গে, আপনি বা এই মত আপনার স্কোপ করতে সক্ষম হবেন

Post.tagfeed(current_user).or.friendfeed(current_user)

অথবা একটি নতুন সুযোগ লিখুন

scope :mother_of_all_feed, lambda{|user| tagfeed(user).or.friendfeed(user)}
0
যোগ
কিছু গঠনমূলক সমালোচনার প্রশংসা করা হবে যেহেতু এটির পতন ঘটেছে। এটি সমস্যার সমাধান করে এবং নেস্টেড প্রশ্নগুলি তৈরি না করে।
যোগ লেখক keithepley, উৎস
অথবা রেলস 5.0 এ যোগ করা হবে: github.com/rails/rails/pull/16052/a >
যোগ লেখক denis.peplin, উৎস
হ্যাঁ, রেড 5 এ OR ActiveRecord :: Relation # বা তে যুক্ত করা হয়েছে - nithinbekal.com/posts/rails-5- বৈশিষ্ট্যগুলি
যোগ লেখক leviathan, উৎস

আমার নিজের প্রশ্ন উত্তর। আমি মনে করি আমি একটি উপায় খুঁজে figured।

where("pages.id IN (?) OR pages.id IN (?)",
  Page.where(
      "user_id IN (?) OR user_id = ?",
      user.watched_ids, user.id
  ),
  Page
    .joins(:attachments)
    .where("attachments.tag_id IN (?)", user.tags)
    .select("DISTINCT pages.*")
)

এটা এতদূর কাজ করা বলে মনে হচ্ছে, আশা করি এটা এই!

0
যোগ
না সন্তুষ্ট, কিন্তু আমি ঠিক prototyping ছিল তাই এটি ঠিক আছে। আমি চিত্কার করে দেখব। ধন্যবাদ!
যোগ লেখক Vlad, উৎস
আপনি তার কর্মক্ষমতা সন্তুষ্ট? মনে হচ্ছে আপনি পেয়েছেন 4-5 টি প্রশ্ন এখানে। মনে হচ্ছে আপনার কাছে দুটি বিকল্প আছে: কাঁচা এসকিউএল-ক্যোয়ারী লিখুন অথবা আমার প্রিয় মণিষ্ণু সিকেল ব্যবহার করুন। এটি সম্পাদন করতে এবং বৈশিষ্ট্যটি সমর্থন করে যা নেস্টেড এসকিউএল কোয়েরির দিকে পরিচালিত করে। একটি নজরে দেখুন: github.com/ernie/squeel । আমি এখানে "বিজ্ঞাপন" করার চেষ্টা করেছি, যেমন এখানে: stackoverflow.com/a/10551561/1322562 , কিন্তু শুধুমাত্র কয়েকটি মানুষ এটা পছন
যোগ লেখক jdoe, উৎস