2010-04-20 17 views
16

Tôi đang cố gắng sử dụng delayed_job để cập nhật cơ sở dữ liệu từ xa thông qua xmlrender_to_string trong lớp lib không làm việc

Trong thư mục lib của tôi, tôi đặt một tập tin với một lớp học mà nên làm một render_to_text với template.xml.builder, nhưng tôi nhận được:

undefined method `render_to_string' for #<SyncJob:0x7faf4e6c0480>... 

Tôi đang làm gì sai?

Trả lời

51
ac = ActionController::Base.new() 
ac.render_to_string(:partial => '/path/to/your/template', :locals => {:varable => somevarable}) 
+9

Nếu bạn đang cố gắng sử dụng nó với ví dụ biến, đi như thế này ': locals => {: @instance_variable => value}' –

+0

Tôi nhận được lỗi mẫu bị thiếu, có vẻ như nó không tìm thấy một phần và tôi đã kiểm tra nhiều lần để đánh vần. vẫn không có gì .. Xin hãy giúp – AirWick219

+0

Bạn sẽ nhận được lỗi "Thiếu mẫu" vì 'ActionController :: Base' sẽ tìm kiếm trong đường dẫn' action_controller/base'. Ủy quyền cho bộ điều khiển khác. Nó thường thừa kế 'ActionController :: Base'. –

3

render_to_string được xác định trong ActionController::Base. Vì lớp/mô-đun được định nghĩa bên ngoài phạm vi của các bộ điều khiển Rails nên chức năng này không có sẵn.

Bạn sẽ phải hiển thị tệp theo cách thủ công. Tôi không biết những gì bạn đang sử dụng cho các mẫu của bạn (ERB, Haml, vv). Nhưng bạn sẽ phải tải mẫu và phân tích cú pháp đó.

Vì vậy, nếu ERB, một cái gì đó như thế này:

require 'erb' 

x = 42 
template = ERB.new <<-EOF 
    The value of x is: <%= x %> 
EOF 
puts template.result(binding) 

Bạn sẽ phải mở tập tin mẫu và gửi nội dung vào ERB.new, nhưng đó là một bài tập còn lại cho bạn. Dưới đây là docs cho ERB.

Đó là ý tưởng chung.

2

Bạn có thể biến template.xml.builder của bạn thành một phần (_template.xml.builder) và sau đó làm cho nó bởi instantiating một ActionView::Base và gọi render

av = ActionView::Base.new(Rails::Configuration.new.view_path) 
av.extend ApplicationController.master_helper_module 
xml = av.render :partial => 'something/template' 

Tôi đã không thử nó với xml, nhưng nó hoạt động tốt với partials html .

+2

tôi nhận được: Phương pháp xác định 'mới' cho Rails :: Cấu hình: Module –

4

Tôi đã có vấn đề với một phương pháp helper không xác định sau đó tôi sử dụng ApplicationController

ApplicationController.new.render_to_string 
+0

Tương tự tại đây. Bạn đã từng sửa người trợ giúp chưa xác định chưa? – nathanengineer

+0

Trong trường hợp của tôi, tôi đã quên không gian tên khi gọi AplicationController. Tôi thử: 'Usr :: ApplicationController.new.render_to_string' Và nó hoạt động. – Germano

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