سؤال

لدي نموذج، Feed، ينتمي إلى العديد من FilteredUsers.في هذه الحالة قمت بتنفيذ ذلك من خلال علاقة has_many :through.

class Feed < ActiveRecord::Base
  has_many :denials, :dependent => :destroy
  has_many :filtered_users, :through => :denials

أرغب في إنشاء سجل إذا لم يكن موجودًا أو العثور على الكائن إذا كان موجودًا.عندما أحاول استخدام find_or_initialize_by (أو find_or_create_by) يتم طرح استثناء يقول undefined method 'feed_id=' for <FilteredUser..

هنا هو الرمز:

feed = Feed.find(params[:id])
user = feed.filtered_users.find_or_initialize_by_user_url(params[:user_url])
if params[:status] == "block"
  feed.filtered_users << user
else
  feed.filtered_users.delete(user)
end
feed.save

هل هناك أي اقتراحات حول كيفية إصلاح هذا أو كيفية التغلب عليه بشكل جاف؟

شكرًا!

هل كانت مفيدة؟

المحلول

أولا، لأنها علاقة has_many :through، والتهيئة لديه أي وسيلة لمعرفة أي denial وfiltered_user الجديدة التي ينبغي المرتبطة. إذا كنت ترغب في استخدام find_or_initialize_by، تحتاج لتشغيله على denial محددة مقترن مع feed.

وبناء filtered_user الجديدة وربطه مع إنكار محددة.

وثانيا، الاتفاق مع ErsatzRyan، والمنطق العام يبدو قليلا قبالة.

نصائح أخرى

ألن يكون من الأسهل التحقق من المعلمات[:status] أولاً ثم القيام بما عليك القيام به؟

feed = Feed.find(params[:id])
if params[:status] == 'block'
   feed.filtered_users.build(:user_url => params[:user_url])
else
   feed.filtered_users.find_by_user_url(params[:user_url]).delete
end
feed.save

تحذير هذا مشفر بالهواء ولم يتم اختباره

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top