gpt4 book ai didi

ruby-on-rails - link_to_unless 问题

转载 作者:数据小太阳 更新时间:2023-10-29 08:54:09 25 4
gpt4 key购买 nike

我在 View 中有这个 RoR 片段:

<%= link_to_unless(@posts_pages[:previous].nil?, 
"Previous",
blog_with_page_path(:page_num => @posts_pages[:previous])) %>

这里的 blog_with_page 是一个命名路由。如果 @posts_pages[:previous].nil?false(正如预期的那样)并且链接生成正确,则该代码段有效。但是,当 @posts_pages[:previous].nil?true 时,我得到的不是简单地返回 "Previous" 字符串,而是错误告诉我无法使用 :page_num=>nil 生成路由。这是预期的行为吗?如果满足条件,则不应评估路由代码,不是吗?这是完整的错误:blog_with_page_url 无法从 {:page_num=>nil, :action=>"show", :controller=>"pages"} 生成,预期:{:action=>"show", :controller=>"pages"},差异:{:page_num=>nil}

我一直在查看 link_to_unless 代码,但我不明白为什么会出现错误,因为它应该只返回名称:

# File actionpack/lib/action_view/helpers/url_helper.rb, line 394
def link_to_unless(condition, name, options = {}, html_options = {}, &block)
if condition
if block_given?
block.arity <= 1 ? capture(name, &block) : capture(name, options, html_options, &block)
else
name
end
else
link_to(name, options, html_options)
end
end

我正在使用 Rails 2.3.11 和 Ruby 1.8.7

干杯!

最佳答案

因为 Ruby 不是惰性语言,blog_with_page_path(:page_num => @posts_pages[:previous]) 会在您调用它时立即求值,无论该值是否曾被 link_to_unless.

关于ruby-on-rails - link_to_unless 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5732689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com