Tôi sẽ thay đổi cách bạn điều chỉnh phạm vi tìm. Rails 3 là đẹp cho phép bạn làm điều này bởi vì chỉ là về tất cả mọi thứ là scope'able.
Thứ nhất trong điều khiển của bạn tôi sẽ tìm thấy tài nguyên cha mẹ sử dụng một cái gì đó như thế này:
before_filter :find_company
# your actions go here
private
def find_company
@company = Company.find(params[:company_id]) if params[:company_id]
end
này nên được khá thẳng về phía trước: Tìm một kỷ lục Company
có một ID mà phù hợp với một trôi qua từ lồng nhau tuyến đường. Nếu nó không được lồng vào nhau, thì sẽ không có params[:company_id]
do đó sẽ không có bộ biến số @company
.
Tiếp theo, bạn muốn tìm phạm vi dự án, tùy thuộc vào việc có hay không @company
được đặt. Điều này cũng dễ dàng. Ngay dưới before_filter
đầu tiên, đặt cái này:
before_filter :scope_projects
Sau đó xác định phương pháp cho nó bên dưới phương pháp find_company
như thế này:
def scope_projects
@projects = @company ? @company.projects : Project
end
Bây giờ có lẽ bạn đang nghĩ "Woah". Tôi biết. Tôi cũng vậy.
Bây giờ, bất cứ nơi nào bạn tham chiếu hoặc là hiệp hội projects
hoặc lớp Project
, hãy sử dụng @projects
để thay thế. Bằng sức mạnh của phương pháp scope_projects
này, ứng dụng của bạn sẽ biết liệu bạn có nghĩa là "tất cả các dự án, bao giờ" hoặc "tất cả các dự án, từng có trong công ty được chỉ định" hay không.
Bây giờ khi bạn nhận được để các quan điểm, bạn có thể làm một cái gì đó như thế này:
<h1><% if @company %><%= @company.name %>'s<% end %> Projects</h1>
Bạn thậm chí có thể di chuyển nó vào một helper:
def optional_company
if @company
@company.name + "'s"
end
end
Và lần lượt là xấu xí hunk-o- logic vào đây:
<h1><%= optional_company %> Projects</h1>
Sửa đổi theo yêu cầu.
Hy vọng điều này hữu ích.
Cảm ơn! hoạt động như một sự quyến rũ. – GSto