نمایش پست‌های مربوط به یک یوزر خاص به جای همه پست‌ها

سلام دوستان
من میخوام یوزری که لاگین شده، بتونه پست‌های خودش رو توی یه صفحه ببینه. برای این کار اومدم روت‌ها رو تنظیم کردم ولی وقتی url مربوط به نمایش پست‌های یه یوزر رو بارگزاری می‌کنم، کل پست‌ها رو نمایش میده، نه فقط پست‌های اون یوزر رو.
مثلا این لینک:
/users/18/posts
کل پست‌های سایت رو نشون میده
به نظرتون مشکل از چیه؟

باید کد رو تو controller هم درست کنی. چون هیچ کدی نذاشتی نمی‌دونم چطوریه ولی باید یک چیزی تو این مایه‌ها بنویسی:

@posts = @user.posts

یا

@posts = Post.where(user_id: params[:id])

می تونی چیزایی که آرش گفت رو هم به صورت scope تو مدل ایجاد کنی. حتی اگه همیشه این از به این صورت می خوای استفاده کنی می تونی به عنوان default_scope هم استفاده کنی

و یا راهکار دیگر , استفاده از Associations ریلز به این صورت هست که مثلا

class User < ActiveRecord::Base
has_many :post
end

class Post < ActiveRecord::Base
belongs_to :user
end

و وقتی از devise استفاده میکنی دیگه همون current_user کار رو برات هندل کنه .

current_user.post.each do |post_info|
puts post_info.id
end

توی کنترلر یوزر، این رو دارم:

    def posts
 @user = User.find(params[:id]
 @posts = @user.posts
end

و مدل یوزر:

has_many :posts, dependent: :destroy

و مدل پست:

belongs_to :user

تو route چی داری؟ اینکه گذاشتی restfull نیست. آدرس users/18/posts از PostsController به صورت پیش‌فرض استفاده میکنه.

توی روت هر دو کد زیر رو تست کردم و از هیچکدوم جواب نگرفتم:

resources  :users do
 resources :posts, only: [:index]
end

get 'users/:id/posts' => 'users#posts', :as => :user_posts

به موضوع ربطی نداره اما وقتی اتو پستتون کد می نویسین. حتما از امکانات markdown استفاده کنید و زبونشم مشخص کنید که highlight شه

1 پسندیده

با فرض اینکه routeات این باشه:

resources  :users do
 resources :posts, only: [:index]
end

این میشه کد controller:

class PostsController < ApplicationController
  before_action :set_user


  def index
    @posts = @user.posts

    respond_to do |format|
      format.html
    end
  end

private

  def set_user
    @user = User.find params[:id]
  end
end

بعدش باید کد view رو چک کنی که درست باشه.

1 پسندیده

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

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