2012-01-11 25 views
5

Vì vậy, tôi có một content_for bên trong chế độ xem của tôi để đăng nhập và trong trình điều khiển phiên, tôi có render :new khi người dùng không nhập bằng chứng xác thực hợp lệ. Tuy nhiên, khi nó render :new, tôi nhận được một trang đen trắng mà không có bất kỳ css hoặc js nào. Đây là cách nhìn content_for tôi nhưđường ray content_for không được thực thi khi thực hiện hiển thị?

<% content_for :head do %> 
    <%= stylesheet_link_tag "user_sessions/new" %> 
    <%= javascript_include_tag 'user_sessions/new.onready' %> 
<% end %> 

Có một công việc xung quanh để chắc chắn rằng mã trên được thực hiện khi tôi làm render?

Trả lời

9

Tôi đoán rằng bạn sẽ không bao gồm content_for ở bất kỳ đâu. Trong app/views/layouts/application.html.erb (hoặc bất cứ bố trí bạn đang sử dụng cho trang này) chắc chắn rằng bạn đã có một cái gì đó như sau:

<head> 
    <!-- your regular head content goes here --> 
    <%= content_for :head %> 
</head> 

Khi bạn vượt qua một khối để content_for, các nội dung của khối được lưu trữ được sử dụng ở nơi khác. Cuộc gọi đến content_for mà không có khối sau đó sẽ chèn nội dung được lưu trữ đó.

Xem the docs for content_for để biết thêm thông tin.

+0

Câu trả lời của RonaldOnRails phải là chấp nhận ed câu trả lời ở đây. – frandroid

+0

Câu trả lời này đúng cho Rails 3, là phiên bản mới nhất khi câu hỏi này được hỏi. –

3
<head><%= content_for :head %></head> 

không làm việc cho tôi, nhưng

<head><%= yield :head %></head> 

làm việc, tôi đoán đây là quyền làm

Chỉ cần ghi nhớ: yield gọi là nội dung, và :head là tham số cho content_for mà u đặt trong chế độ xem được hiển thị của bạn, vì vậy bạn có thể đặt các đoạn mã ở bất kỳ đâu trong application.html u muốn

+0

Điều này làm việc chính xác như nó được dự định ... Thật kỳ lạ tôi không nhớ phải làm theo cách này trong các phiên bản trước của Rails. Nó có thể đã thay đổi. Bất kể, cảm ơn vì điều này! – rcd

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