我正在关注RailsTutorial,而我目前仍然坚持exercise 10.5.5。由于我改变了很多,我已将代码放入paste(已更新)。
进入粘贴之前需要注意几点:
if
语句partials使用不同的对象名称,但它们代表数据库中的同一对象。理想情况下,我希望将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
答案 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 } %>
测试对我来说仍然有点不寻常,所以我不能排除它会强制重新评估套件中的某些东西。