2

我是一名 Rails 初学者,在理解 render 方法的工作原理时遇到了一些麻烦。我正在关注这个 railscasts,它与 rails 的祖先插件有关。我无法理解的部分是 RyanB 提供的 nested_forms 辅助方法。

def nested_messages(messages)
  messages.map do |message, sub_messages|
  render(message) + content_tag(:div, nested_messages(sub_messages), :class =>     
  "nested_messages")
  end.join.html_safe
end

当调用 render(message) 时,rails 渲染 _message.html.erb 部分。我将如何强制它呈现不同的部分?

我试过这样的事情:

def form_nodes(nodes)
 nodes.map do |node, sub_nodes|
   render(:partial => 'mypartial', :locals => node) + content_tag(:div, form_nodes(sub_nodes), :class => "nested_nodes")
 end.join.html_safe
end

但这会导致错误:

undefined method `keys' for

我正在使用 Ancestry 创建调查表。这允许用户创建一个调查,然后接受它。所以我想让rails渲染两种不同类型的视图。一种用于创建调查,另一种用于进行调查。所以我想创建一个单独的部分来显示我的祖先节点,但我不确定如何强制 render(message) 方法呈现不同的部分。

任何帮助,将不胜感激。

谢谢

4

1 回答 1

0

万一有人遇到这个问题。这就是我最终为了让它工作而做的事情。我不知道这是否会被认为是最好的解决方案,但它对我有用。如果我做了一些愚蠢的事情,请随时更正我的代码。

def form_nodes(nodes, answers)
     nodes.map do |node, sub_nodes|
       render(:partial => 'folder/mypartial', :locals => { :node => node, :answers => answers, :f => builder}) + content_tag(:div, form_nodes(sub_nodes,answers), :class => "nested_nodes")
     end.join.html_safe
 end
于 2013-02-03T18:54:49.280 回答