Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails 4.0中链接到_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 在Rails 4.0中链接到

Ruby on rails 在Rails 4.0中链接到,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,关于rails 4.0中链接到的问题,因为我刚刚升级。旧版本的Rails 3没有问题 简化示例: link_to_if(user, "User", user.id) content_tag(:span, "No User") end 因此,对于给定的用户对象,它只需将其id设置到链接中。我现在的问题是,如果这里没有用户(nil)/甚至不能硬编码“false”。在旧的Rails 3中,它只是忽略了选项 在Rails 4中,即使条件未满足,它也会奇怪地触发选项。为什么?我真的需要检查零,即使条

关于rails 4.0中链接到的问题,因为我刚刚升级。旧版本的Rails 3没有问题

简化示例:

link_to_if(user, "User", user.id)
  content_tag(:span, "No User")
end
因此,对于给定的用户对象,它只需将其id设置到链接中。我现在的问题是,如果这里没有用户(nil)/甚至不能硬编码“false”。在旧的Rails 3中,它只是忽略了选项

在Rails 4中,即使条件未满足,它也会奇怪地触发选项。为什么?我真的需要检查零,即使条件已经这样做

编辑,真实代码:

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
def链接到上一张海报
链接到如果(@poster.prev,skip_poster.to_i-1),:accesskey=>'h')do| name|
内容标签(:span,“current”)
结束
结束
在@poster.prev==nil的情况下,它会用nil值触发poster_路径,从而导致路由错误

浏览器上的错误是:

ActionController::海报中的UrlGenerationError#show 显示/../show.html.haml,其中第5行出现:

没有路由匹配{:action=>“show”,:controller=>“posters”,:id=>nil,:format=>nil,:skip=>-1}缺少必需的键:[:id]

poster_path(@poster.prev, :skip => skip_poster.to_i-1)
无论
@poster.prev
是否为nil/falsy,都将执行此代码。您将上述内容作为参数传递到
link_to_if
;将对其进行求值,其返回值将作为参数传递到
链接中

我会重写助手

def link_to_previous_poster
  return content_tag(:span, '< Previous'.html_safe, :class => "current") if @poster.prev.blank?

  link_to(@poster.prev, "< Previous".html_safe, poster_path(@poster.prev, :skip => skip_poster.to_i-1), :accesskey => 'h')
end
def链接到上一张海报
如果@poster.prev.blank,返回内容标签(:span,“current”)?
链接到(@poster.prev,skip\u poster.to\u i-1),:accesskey=>h')
结束

你试过
链接到if(user.present?,“user”,user.id)[等]
?它不工作,即使我使用
链接到if(false,“user”,user.id)
它调用user.id“它不工作”是什么意思?它显示链接了吗?它会引发异常吗?拒绝提供导致问题的真实代码或您收到的真实异常(堆栈跟踪等)使我们很难为您提供真正的帮助。我在问题中添加了真实代码。谢谢,我已经重写了代码,我只是想知道为什么在不满足条件的情况下对选项部分进行评估。