rails 将视图中的 "each" 参数传递给控制器

rails passing "each" argument in a view to a controller

我正在尝试将参数从视图中的 "each" 循环传递给控制器​​。我有一份合同清单。 'contract' 模型有一个 'signed' 属性,该属性为 nil 或包含日期时间(如果合同已签署)。我想在视图中列出所有合同,如果合同已签署则呈现静态部分,如果合同未签署则呈现 link 以签署合同。我首先在视图中呈现我的合同列表以及方法:

<%@contract.each do |contract| %>
<%= @contract.reference %>
<%= show_either_static_if_signed_or_link_if_not_signed %>

在我的 helpers 中,我定义了一个带有一些基本代码的 dry-运行 方法来尝试第一个合约

def show_either_static_if_signed_or_link_if_not_signed
  @contract = Contract.find(1)
  if @contrat.signed.nil?
  render 'contracts/static_template'
  else
  render'contracts/template_with_a_link_to_sign_the_contract'
end

这对第一份合同来说效果很好。我现在想在模板的 "each" 循环中为每个合约部署此代码。我试过了

 def show_either_static_if_signed_or_link_if_not_signed(contract)
  if contrat.signed.nil?
  render 'contracts/static_template'
  else
  render'contracts/template_with_a_link_to_sign_the_contract'
end

但是 'I get wrong number of arguments (0 for 1)' 因为我无法从模板到控制器获取 'contract' 参数。任何人都可以为我提供适当的语法来将参数从我视图的 "each" 循环传递给辅助方法吗?也欢迎就此问题提出其他建议。谢谢。

您的辅助方法 show_either_static_if_signed_or_link_if_not_signed 需要 1 个参数,但是,您在从视图调用它时没有传递任何参数。

更新您的视图以传递所需参数,如下所示:

<% @contract.each do |contract| %>
  <%= contract.reference %>
  <%= show_either_static_if_signed_or_link_if_not_signed(contract) %>
  ...
  ...
<% end %>

调用helper方法时需要传入contract...

<%@contract.each do |contract| %>
  <%= contract.reference %>
  <%= show_either_static_if_signed_or_link_if_not_signed(contract) %>
<% end %>