如何将集合从父部分传递到任意子部分深度?

时间:2012-03-17 04:03:26

标签: ruby-on-rails partial

我正在关注RailsTutorial,而我目前仍然坚持exercise 10.5.5。由于我改变了很多,我已将代码放入paste(已更新)。

进入粘贴之前需要注意几点:

  1. 其中一个原始部分收到来自它的父母"部分,而另一个直接从控制器接收对象。
  2. 这两个" child"中的if语句partials使用不同的对象名称,但它们代表数据库中的同一对象。
  3. 理想情况下,我希望将if语句移到孙子语中,或者子语句,部分语句中。如果需要的话,我可以把它留在孩子身上,但这并不觉得干。

    我尝试使用<%= render partial: 'shared/foo', object: bar, as: :baz %>部分渲染孙子,所以我可以在孙子部分使用baz,因为默认情况下另一个孩子部分使用baz。在那部分中,我只是做<%= render partial: 'shared/foo', object: baz %>。困惑?我也是。

    您会注意到我尝试使用和不传递父对象来渲染部分内容。也许父对象需要重新定义?我也尝试了<%= render partial: 'shared/micropost_delete_link', object: feed_item %>,但没有运气。

    到目前为止,我尝试的每种方法都会在测试中产生相同的错误:

     Failure/Error: before { visit root_path }
     ActionView::Template::Error:
       undefined method `user' for :feed_item:Symbol
    

    这似乎表明我无法传递从父选项collection: @feed_items收到的单个对象。

    更新:我的原始粘贴中有一个拼写错误。在更新的粘贴中已修复,我的测试仍然失败。

     Failure/Error: before { visit root_path }
     ActionView::Template::Error:
       undefined method `user' for nil:NilClass
    

1 个答案:

答案 0 :(得分:1)

在某个地方,我尝试了不同的语法,测试开始传递:

<%= render partial: 'shared/micropost_delete_link', locals: { micropost: feed_item } %>

尽管the docs表示以下内容应该相同:

<%= render :partial => "account", :object => @buyer, :as => 'user' %>
<%= render :partial => "account", :locals => { :user => @buyer } %>

测试对我来说仍然有点不寻常,所以我不能排除它会强制重新评估套件中的某些东西。