2012-01-15 40 views
9

Tôi đang làm việc trên một blog như ứng dụng, sử dụng mô-đun bài viết has_many của tôi và bài viết mô-đun belongs_to dùngray điều khiển cho lồng nhau và không lồng nhau nguồn lực hỗn hợp

tôi muốn truy cập cả người dùng /: id/bài viết và bài viết/

routes.rb là một cái gì đó như thế này:

resources :users do 
    resources :posts 
end 

resources:posts 

làm thế nào tôi có thể biết bên trong bộ điều khiển bài viết nếu truy cập của nó trực tiếp (/ bài viết) hoặc thông qua các tuyến đường lồng nhau (/ người dùng /: id/bài viết)?

ví dụ, những gì nên là phương pháp chỉ số của bộ điều khiển bài viết để thực hiện các hành động INDEX chính xác cho/người dùng /: id/bài và/bài

là có một cách tốt hơn để làm điều này?

Trả lời

7

Một giải pháp có thể được sử dụng một bộ lọc trước khi vào điều khiển của bạn, như:

before_filter :load_user 

def load_user 
    @user = User.find(params[:user_id]) if params[:user_id] 
    @posts = @user ? @user.posts : Post.scoped 
end 

Sau đó, bạn phải viết lại điều khiển của bạn một chút để hoạt động đúng.

Không refactoring cần thiết trên index hành động, @posts đã nạp một cách chính xác, nhưng bạn có thể làm lọc hơn nữa như bạn muốn

def index 
    @posts = @posts.where('updated_at < ?' Time.now) 
end 

Sau đó cập nhật mỗi hành động thành viên: mới, sáng tạo, chương trình, chỉnh sửa, cập nhật, phá hủy và sử dụng bài viết như một cơ sở như:

def new 
    @post = @posts.build 
end 

def create 
    @post = @posts.build(params[:task]) 
end 

def show 
    @post = @posts.find(params[:id]) 
end 

def edit 
    @post = @posts.find(params[:id]) 
end 

def update 
    @post = @posts.find(params[:id]) 
end 

def destroy 
    @post = @posts.find(params[:id]) 
end 

Tất nhiên bạn có thể thêm khác trước khi bộ lọc để loại bỏ mã trùng lặp.

1

Kiểm tra thông số.

Nếu chỉ gửi bạn sẽ chỉ phải :id

Nếu người dùng/bài bạn sẽ phải sử dụng và ID cho đường bưu điện.

Vì vậy, kiểm tra xem params[:user] ...

n.b. Nếu không phải người dùng, hãy thử params[:user_id]

Đối với phương pháp index cho posts Tôi nghĩ nó thực sự sẽ là CÙNG trong cả hai trường hợp. Điều gì sẽ thay đổi mọi thứ là cách sử dụng, liên kết và phạm vi của nó trong người dùng.

Các vấn đề liên quan