【发布时间】:2011-11-15 16:00:49
【问题描述】:
我一直在忙着制作一个可排序的表格模块。我知道有些可能存在,但我想自己获得经验。我有这样的想法:
SortedTable.new(ModelName, Hash_Of_Columns_And_Fields, ID)
例子
SortedTable.new(Post, {"Title" => "title", "Body" => "body", "Last Comment" => "comment.last.title"}, params[:id])
我打算这样做:
def initialize(model, fields, id)
data = {}
model = model.capitalize.constantize
model.find(id)
fields.each do |column, field|
data[column] = model.send(field)
end
end
这适用于标题和正文,但在使用 Last Comment 和 comment.last.title 时会出错。我试过做Post.send("comments.last.title"),但说NoMethodError: undefined method 'comments.last.title' for #<Post:0x0000010331d220>
我知道我可以做到 Post.send("comments").send("last").send("title") 并且可行,但我想不出如何通过获取字段并拆分 on 来动态地做到这一点。然后链接发送。谁能给我建议如何做到这一点?如果我这样做也完全错误,那么请说或指出我做类似事情的代码方向。我不是专业的 ruby 开发人员,但我正在努力。
P.S 上面的代码可能无法正常工作,因为我没有使用 ruby/rails 进行测试,但希望你能理解这个概念。
干杯
【问题讨论】:
标签: ruby ruby-on-rails-3 send dynamic-method