خطای NoMethodError در روبی

من با این توتوریال داشتم پیش می‌رفتم :
https://dev.to/knheidorn/rails-crash-course-building-follower-following-relationship-4kjl
و بعد این رو نوشتم:
github.com/prp-e/rails-followers

اما وقتی در اندپوینت :

/profile/1/relationships

توسط دکمه فالو وارد می‌شم، ارور میده و میگه متد خاصی رو پیدا نکرده. ممنون میشم راهنمایی کنید چطور حل کنم.

سلام،
عنوان مطلب ربطی به سوالی که پرسیدین‌نداره، لطفا درستش کنید و اگر امکان داره دقیقا ارور رو بذارید اینجا

بفرمایید، این هم اررور.

1 Likes

دوست عزیز اگر امکان تیتر مطلب رو هم درست کنید چون این چیزی که پرسیدین اصلا ربطی به یک سیستم فالوئر نداره.
خطا هم کاملا مشخصه؛ خروجی قسمتی که زیر گذاشتم به یه دلیلی nil هست و برای همین قسمت دوم ارور میده

params[:relationship]

اگر توی کنسول ریلز یا irb زیری رو اجرا کنی با ارور مشابهی برخورد میکنی

nil[:follower_id]

حالا باید ببینی چرا nil هست و در این جور مواقع میتونی از متد fetch استفاده کنی

params.fetch(:relationship, {})[:follower_id]

هرچند بهتره در استفاده از fetch زیاده روی نکنی چون ممکنه به صورت خاموش ارور های سیستم مخفی بشه و بهتره سعی کنی پارامتر ها خوب رو بررسی کنی.

1 Likes

عنوان درست شد.
حس خودم اینه که یکی از کاربرا رو درست دریافت نمی‌کنه، حالا نمی‌دونم کاربریه که فالو می‌کنه یا کاربری که میخواد فالو بشه.
واقعا ایده‌ای ندارم که چطور میشه این موضوع رو درست کرد.

1 Likes

بله بنظر همینطور میاد، برای همین گفتم fetch مشکل اصلی رو مخفی میکنه،
کد رو دیدم که گذاشتین -تصحیح میکنم- اگر فرصت شد من یا دوستان دیگه چک میکنیم.

اصلا پارامتری فرستاده میشه که بخواد توی دیتابیس پیداش کنه؟
قبلش چه عملی انجام میدید که به این ارور برخورد میکنید؟ صرفا همین url را باز میکنید؟ اگر صرفا همین url را باز میکنید و خطا میده اصلا نباید این method اجرا بشه، باید show اجرا بشه طبق چیزی که مرسومه. اگر به اون آدرس دارید post میفرستید باید پارامترهایی که اونطرف میخواد هم بفرستید.

پ.ن: یک منبع آموزشی خیلی عالی هست که همین نوع پروژه را میسازه.

مشکل از دیتابیس نیست، همونطور که عرض کردم خروجی قسمت اول که relationship رو از params میخونه nil هست و کلا کار به دیتابیس نمیکشه، اصلا متد find اجرا نمیشه.
در کل کلید relationship توی params یا وجود نداره یا مقدارش nil است. دقیقا مثل عکسی که گذاشتم

یه نگاه کوچیک انداختم به کد ولی با مبایل یکمی سخته، به هر حال اصلا متوجه نشدم چرا انتظار داری که آبجکت params کلیدی به نام relationship داشته باشه چون اصلا هیچ جا توی views ندیدم که همچین چیزی ست شده باشه.
یه نگاه به آموزش هم انداختم، قسمت view رو پیدا نکردم، آموزش ناقصه و راستش رو بخوای اصلا متوجه نشدم هدفش چی بوده

درسته. منم همین منظورم بود. اصلا پارامتری توی params نیست که بخواد که بعدش از توی دیتابیس find کنه… درسته که قبل از find‌ داره خطا میده ولی منظورم از نظر منطقی بود.

1 Likes

بله من درست نخوندم، پوزش میخوام

1 Likes

بله مساله همینه که درست آموزش مشخص نکرده چی به چیه، فعلا جم act_as_favoritor رو دارم بررسی می‌کنم.
ظاهرا اون به خوبی می‌تونه سیستم دنبال‌کنندگی رو پیاده کنه.

اگر عجله نداری این کتاب منبع خیلی خوبیه و با خیلی از best practice ها آشنا میشی و میتونی بعدش پروژه‌های جدی پیاده کنی. اگر با کتاب هم خیلی میونه نداشته باشی فکر کنم بتونی فیلم همین هم گیر بیاری ولی کتابش کافی و رایگان هست.
برای مشکل این قسمت‌ات هم اگر پارامتر های خواسته شده توسط متد create را ارسال کنی این خطا رفع میشه.