【问题标题】:pass params to controller method via link_to rails 4通过 link_to rails 4 将参数传递给控制器​​方法
【发布时间】:2016-02-02 21:21:47
【问题描述】:

我想将一个参数从 text_field_tag 传递给我的控制器,但它没有通过 link_to 传递

      <div class="row" id="page-search">
        <%= hidden_field_tag :page, params[:page], class: 'form-control', value: '1'%>
        <%= text_field_tag :page, params[:page], class: 'form-control', id: 'show-page'%>
        <%= link_to 'Go', currencies_path, :remote => true, method: :get, class: "btn btn-default", id: "show-button" %>
      </div>

控制器方法

      def index
        @currencies = Currency.all.page(params[:page]).per(10)
      end

它应该调用这个方法,但它没有传递参数[:page]。关于如何解决这个问题的任何线索?

谢谢

根据建议,我这样做了,但我仍然面临同样的问题,因为它没有通过参数

       <%= form_tag currencies_path, :method => :get do -%>
          <%= text_field_tag :page, params[:page], class: 'form-control', id: 'show-page'%>
          <%= hidden_field_tag :page, params[:page], class: 'form-control', value: '1'%>
          <%= submit_tag 'Go' %>
        <% end %>

【问题讨论】:

标签: javascript ruby-on-rails ruby-on-rails-4


【解决方案1】:

链接是自包含的:它们只关心自己的论点中的内容。

如果您想从页面上的字段提交参数,那么您需要将这些字段包装在 表单 中并提交表单。

如果您想将该数据放入链接中,则可以将 link_to 更改为:

    <%= link_to 'Go', currencies_path(page => 1), :remote => true, method: :get, class: "btn btn-default", id: "show-button" %>

【讨论】:

  • 我想基于 text_field_tag 输入,所以页面的值不能是静态的,因为你把它放进去。有什么办法吗?如果我做 page => params[:page] 会起作用
  • 改成表格。
  • 我编辑并更改为表单但仍然没有提交
  • 记住它是一个远程表单,所以当你提交时它不会任何事情。您应该发布日志以显示正在发生的事情
  • 您是否将链接替换为提交按钮?
【解决方案2】:

这会将输入的值作为文本字段标记的一部分发送。

<%= form_tag currencies_path, :method => :get do %>
      <%= text_field_tag :page, nil, class: 'form-control', id: 'show-page'%>
      <%= submit_tag 'Go' %>
<% end %>

我不确定您为什么将 params[:page] 设置为文本字段的值。还是我在这里遗漏了什么?

如果您想使用 params[:page],请将其设置为操作中的变量,

@page_number = params[:page]

html应该改成,

<%= text_field_tag :page, @page_number, class: 'form-control', id: 'show-page'%>

【讨论】:

    【解决方案3】:

    我不提倡为 hiddentext 字段提交相同的值:

    <%= form_tag currencies_path, method: :get do %>
       <%= text_field_tag :page, params[:page], class: 'form-control', id: 'show-page'
       <%= submit_tag "Go" %>
    <% end %>
    

    您必须记住,您当前的表单使用remote: true,它是Rails UJS 的ajax 包装器。因此,如果您想检查发生了什么,您需要确保您已从表单声明中删除 remote: true

    --

    如果您想静态设置值(IE 用户无法更改),您需要查看button_to,因为这可以通过hidden 字段传递params

    <%= button_to "Go", currencies_path, method: :get, params: { page: "1" } %>
    

    这样做的问题是您无法更改视图中的页面(您在 params 哈希中分配的值将是静态的)。

    【讨论】:

    • 远程表单仍然会提交,它只是通过 ajax 调用来完成。除了响应之外,它在日志中看起来几乎相同。
    • 是的,我就是这个意思。 OP 说“什么都没有发生”/“不会提交” - 只是暗指这样一个事实,即远程会让人看起来除非响应被捕获,否则什么都不会出现。
    • 啊,我明白了。 :) OP:注意你的日志文件。
    • 你的建议是正确的,我的实现是错误的,它现在有效
    猜你喜欢
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多