Tôi đã gặp một sự kỳ quặc mà tôi không thể giải thích liên quan đến Rails 3 và hiển thị partials với bố cục (từ bộ điều khiển). Tôi hy vọng ai đó có thể cung cấp một chút thông tin chi tiết về những gì đang xảy ra.Rails 3 vs 2.3.5 hiển thị các số lẻ với: một phần và: bố cục
Trước hết, chúng tôi sẽ gọi bộ điều khiển này là bộ điều khiển "kế thừa". Nó đã được khoảng một thời gian dài và đang làm rất nhiều điều sai trái, nhưng tôi không tìm cách tái cấu trúc nó vào thời điểm này vì vậy tôi đang cố gắng tìm cách để làm việc với những gì chúng tôi có.
Hành động new
là một cái gì đó như thế này (trong BarsController
)
def new
if something
render :partial => "foo", :layout => "bars"
elsif something_else
render :partial => "foo2", :layout => "bars"
elsif something_else_else
render :partial => "foo3", :layout => "bars"
else
render :partial => "foo4", :layout => "bars"
end
Bây giờ, trong Rails 2.3.5, điều này làm việc tốt. Nó sẽ làm cho phần thích hợp bên trong bố trí thích hợp - tôi nhận ra rằng tùy chọn bố trí là dư thừa ở đây vì nó sẽ mặc định bố trí thanh bất kể. Khi chúng tôi nâng cấp lên Rails 3.0.x, chúng tôi bắt đầu nhận được lỗi như sau:
Missing partial layouts/bars with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html]
Rõ ràng file layouts/bars.html.erb
là và luôn luôn ở đó, vì vậy tôi không thể hình dung nó ra. Tôi đã có thể render với :layout => false
, nhưng tất nhiên điều đó sẽ không hoạt động. Cuối cùng tôi đã tìm ra rằng nếu tôi làm một trong hai điều sau đây, nó hoạt động:
1) Đổi tên bố trí của tôi để _bars.html.erb
thay vì bars.html.erb
và:
render :partial => 'foo2', :layout => 'bars'
2) Giữ cho bố cục của tôi như bars.html.erb
(những gì tôi muốn) và:
render '_foo2' # :partial option is redundant here anyway
Có vẻ như là bằng cách sử dụng tùy chọn: partial thay vì chuỗi như tham số đầu tiên là làm cho đường ray áp dụng quy ước _name.html.erb
cho cả partial
VÀ layout
. Nếu tôi đặt dấu gạch dưới của riêng tôi, nó rơi trở lại hành vi tôi mong đợi mà không phải là thêm một mặt trước _
của tên bố trí.
Có ai biết tại sao trường hợp này xảy ra không?
EDIT Alright, không chắc chắn làm thế nào tôi bỏ lỡ này ... nhưng đây là một cái gì đó trong các tài liệu làm đề cập đến điều này. Dường như nó đã được khoảng từ 2.3.8, có lẽ nó đã được thực hiện một cách khác nhau trong 2.3.5 (những gì chúng tôi đã chạy trên)?
3.4.3 Layouts phần
Một phần có thể sử dụng tập tin bố trí riêng của mình, giống như một cái nhìn có thể sử dụng một cách bố trí . Ví dụ, bạn có thể gọi một phần như thế này:
<% = render "link_area",: Bố cục => "graybar" %> Điều này sẽ tìm kiếm một _link_area.html.erb tên từng phần và làm cho nó bằng cách sử dụng bố cục _graybar.html.erb.Lưu ý rằng bố cục cho partials theo cùng một tên hàng đầu dưới gạch dưới dạng partials thông thường và được đặt trong thư mục giống với một phần mà chúng thuộc về (không nằm trong thư mục bố cục chính ).
Điều này sẽ yêu cầu nhiều mã mod hơn nếu bạn chuyển tham số cho partials, qua: đối tượng hoặc: người dân địa phương vì những thứ đó không hoạt động với mẫu. Tôi ước họ đã không thay đổi hành vi ... – farhadf