Rails 5 - 在 link_to 中如何传递 nil(NULL)参数?

6

我有一个链接需要传递一系列参数,其中2个参数总是为空。

link_to go_to_action_path(id, par_01, par_02, par_03, par_04)

在某些情况下,par_01par_02 可能为 nil;在其他情况下,可能是 par_03par_04

如果我的变量值如下:

par_01 = nil
par_02 = nil
par_03 = 'a'
par_04 = 'b'

然后在 go_to_action 动作中:

p01 = params[:par_01]
p02 = params[:par_02]
p03 = params[:par_03]
p04 = params[:par_04]

我得到了这些值:

p01 => a
p02 => b
p03 => 
p04 => 

换句话说,变量par_01par_02将被丢弃,并在它们的位置上移动par_03par_04
我如何强制link_to接受一个带有nil值的参数?我考虑用0代替nil并在控制器操作中手动解析它,但这是一个相当丑陋的解决方案。

不确定我们有足够的信息。go_to_action_path是什么?它是一个路由吗?如果是,是哪个路由?如果是一个方法,我们需要源代码。 - Philip Hallstrom
这是一个控制器操作路径的示例(是的,它是一条路由)。上面是伪代码。问题在于如何通过参数传递“nil”值,并在控制器操作的另一端“接收”它。 - user984621
Nimish的回答可能是正确的,但如果能看到控制器操作,那真的会很有帮助。否则我们只能猜测。 - Philip Hallstrom
你尝试过在ERB中使用&吗?简单来说,它可以让代码即使参数为nil也能正常工作。 - Jake
1个回答

3
您可以在您的路由中将hash作为第二个选项与id一起传递。
使用以下代码: link_to go_to_action_path(id, { par_01: par_01, par_02: par_02, par_03: par_03, par_04: par_04 }) 替代以下代码: link_to go_to_action_path(id, par_01, par_02, par_03, par_04) 然后,在控制器中,假设动作名称为action
# here you can use your params
def action
  p01 = params[:par_01]
  p02 = params[:par_02]
  p03 = params[:par_03]
  p04 = params[:par_04]
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接