Tôi đang xác định động một phương thức trong một mô-đun và tôi muốn kiểm tra xem khi phương thức được ràng buộc với một cá thể lớp mà nội dung của phương thức là thứ tôi ' m mong đợi. Có cách nào để xuất (như văn bản) của cơ thể của một phương pháp?Lập trình meta: phần thân phương thức xuất dưới dạng văn bản
Mô-đun controller_mixins.rb
:
module ControllerMixin
instance_eval "def search_by_vendor (*args) \n" \
" @#{self.class.name.sub(/Controller/, '').tableize} = #{self.class.name.sub(/Controller/, '')}.find_all_by_vendor_id(params[:vendor_id]) \n"\
"respond_to do |format| \n" \
" format.html { render :template=>'/#{self.class.name.sub(/Controller/, '').tableize}/index', :layout=>'vendor_info'} \n" \
" format.xml { render :xml => @#{self.class.name.sub(/Controller/, '').tableize} } \n" \
"end \n"\
"end \n"
end
lớp được trộn với:
class VendorOrdersController < ApplicationController
# GET /vendor_orders
# GET /vendor_orders.xml
require 'controller_mixins'
include ControllerMixin
<rest of class>
Vì vậy, tôi muốn xem thi hành mixin khi áp dụng cho VendorOrdersController
lẽ qua script/console
cho thuận tiện.
CẬP NHẬT: Mỗi @ ~/Tôi đã lưu chuỗi vào biến và puts
'd. Điều đó làm việc hoàn hảo. Điều này mang lại một lỗi trong mã của tôi (lý do tôi muốn xem mã ở vị trí đầu tiên). Mã dưới đây là tốt hơn nhiều, và hoạt động như mong đợi.
module ControllerMixin
def self.included(mod)
method_body = "def search_by_vendor \n" \
" @#{mod.name.sub(/Controller/, '').tableize} = #{mod.name.sub(/Controller/, '')}.find_all_by_vendor_id(params[:vendor_id]) \n"\
"respond_to do |format| \n" \
" format.html { render :template=>'/#{mod.name.sub(/Controller/, '').tableize}/index', :layout=>'vendor_info'} \n" \
" format.xml { render :xml => @#{mod.name.sub(/Controller/, '').tableize} } \n" \
"end \n"\
"end \n"
puts method_body
mod.class_eval(method_body)
end
end
define_method là bạn của bạn – shingara
Có thể bạn sẽ muốn sử dụng 'tài liệu tại đây' ('CODE << - ... CODE') thay vì chuỗi được ghép nối. Định dạng đẹp hơn nhiều. – Chubas
Tại sao tôi không nghe nói về các tài liệu này ở đây Đây là một gửi GOD. Cảm ơn bạn. Giải thích tốt (trên blog của người khác): http://blog.commonthread.com/2007/12/20/tip-ruby-here-document – SooDesuNe