导轨:将二维阵列传递到link_to



我有一个带有操作send_file的控制器querys。querys_controller.rb

def send_file
    send_data(params[data], :filename => "query.txt")
end

在html.erb中,我有:

<%=link_to "send data", :controller=>"querys", :action=>"send_file", :data=>@mat, method: :post%>

通过单击"发送数据"栏,我可以看到"错误请求",因为@mat是一个二维数组,似乎我link_to无法发送这样的结构。如何将矩阵发送到控制器?

@mat:  
[["1681", "", "02.05.1955"], ["1680", "", "02.03.1936"], ["1679", "", "26.11.1938"], ["1692", "", "15.05.1958"]]

@Tonja,对我来说,你在做什么似乎很奇怪。首先,你在某个地方生成一个数组,然后再次使用浏览器将其传递回您的应用程序。然后您以文本格式将其发送回浏览器?不应将此数组传递给用户,而应将其保留在服务器上。只需将其存储在数据库中即可。不要将数据传递给用户,只有在绝对必要的情况下。您当前的实现还强制您对传递的数据进行相当多的检查。

在生成 html.erb 的控制器方法中,将@mat实例存储在某个位置,并获取记录的 ID。将此 ID 传递给link_to,并将数据库中的此数据用作send_data调用的参数。

(小提示:实际上不要使用 ID,这不安全,而是使用随机值。甚至更好:如果可以将值附加到current_user),则根本不传递任何内容)。

您收到错误请求是因为 Rails 不理解您请求的格式。那是因为你自己组装了网址。使用类似

link_to "send file", send_file_querys_path(format: :txt)

甚至

button_to ....

如果是开机自检操作。

您可以使用"耙子路线"获取有效路线。这使你的应用更易于测试。

我希望我的回答能帮助你重新设计你的代码。如果你正在做的事情是正确的方式,那么@m_x给了你正确的指示。

此致敬意

雨 果

以哈希形式传递 url 参数时,应将它们与 link_to 的其余参数分开:

<%
  = link_to "send data", 
            {controller: "querys", action: "send_file", data: @mat}, 
            method: :post
%>

但是,这会将数据作为查询参数传递。如果您确实想将数据作为 POST 参数传递(例如,如果@mat包含大量数据),则必须使用带有隐藏字段和提交按钮的表单标记。

IMO 更有效的方法是传递填充@mat所需的参数,重新填充变量服务器端并在send_file中使用它。

这方面的最佳实践是利用rails的format功能,例如:

def some_action
  @mat = populate_mat(params)
  respond_to do |format|
    format.html
    format.txt do
      send_data(@mat, :filename => "query.txt")
    end
  end
end

(注意:为此,您可能需要在 config/initializers/mime_types.rb 中注册 txt MIME 类型)

那么在some_action.html.erb

<% = link_to "send data", {format: :txt}, class: 'whatever' %>

这将只在当前 url 的末尾添加一个.txt扩展名,它与 REST 范式(每个资源一个端点,扩展名指示所需的表示形式)很好地配合使用。

您还可以将 format 选项传递给任何 url 帮助程序,例如:

<%= link_to "root", root_path(format: :txt), class: 'whatever' %>

试试这个:

link_to("Send data", send_file_querys_path(data: @mat), method: :post) 

相关内容

  • 没有找到相关文章

最新更新