关于rails 4.0中的link_to_if的问题,因为我刚刚升级。旧的 Rails 3 版本没有问题。
简化示例:
link_to_if(user, "User", user.id)
content_tag(:span, "No User")
end
因此,对于给定的用户对象,它只需将其 id 设置到链接中。我现在的问题是如果没有用户(nil)/甚至可以在这里硬编码“false”。在旧的 Rails 3 中,它只是忽略了这些选项。
在 Rails 4 中,即使条件不满足,它也会奇怪地触发选项。为什么?即使条件已经做了,我真的需要检查 nil 吗?
编辑,真实代码:
def link_to_previous_poster
link_to_if(@poster.prev, "< Previous".html_safe, poster_path(@poster.prev, :skip => skip_poster.to_i-1), :accesskey => 'h') do |name|
content_tag(:span, '< Previous'.html_safe, :class => "current")
end
end
在@poster.prev==nil 的情况下,它会使用 nil 值触发 poster_path,这会导致路由错误。
浏览器上的错误是:
海报中的 ActionController::UrlGenerationError #show Showing /.../show.html.haml 其中第 5 行提出:
没有路线匹配 {:action=>"show", :controller=>"posters", :id=>nil, :format=>nil, :skip=>-1} 缺少必需的键:[:id]