【问题标题】:Passing parameter to link_to rails 2将参数传递给 link_to rails 2
【发布时间】:2011-09-19 19:48:27
【问题描述】:

我写了以下表格:

<% remote_form_for :login,
      :url => {:controller => :usuarios, :action => :login },
      :html => { :multipart => true } do |f| %>
          <p class="login_field">
            Login:<br />
            <%= f.text_field  'login' %>
          </p>
           <p class="login_field">
               Clave:<br />
              <%= f.password_field  'clave' %>
           </p>
           <br />
           <p align ="right">
               <%= f.submit 'Ingresar' %>
            </p>
             <p class="forgot">
               <%= link_to "Olvid&oacute su clave?", { :controller => 'usuarios', :action => 'olvido_contrasena', :login =>  }, :post => true %>
            </p>
            <br />
            <p id="error_msg_login"></p>
 <% end  %>

现在,在我的控制器中,我有:

def olvido_contrasena
    if request.post?      
      u= Usuario.find_by_login(params[:login][:login])
      puts u.email
      if u and u.enviar_nueva_clave
        flash[:message]  = "Una nueva clave ha sido enviada a su correo electronico."
        redirect_to :action=>'login'
      else
        flash[:warning]  = "No se pudo enviar la nueva clave."
        puts "fail"
        redirect_to "/admin_main"
      end
    end
  end

但是,我有两个问题:

  1. 该操作被称为 GET(它应该是 POST)。
  2. 参数[:login][:login] 未发送....

我可以在这里做什么?

谢谢!

在用户单击“忘记密码”链接后,我通过添加带有新表单的新视图解决了我的问题。 最简单、最干净的解决方案。

【问题讨论】:

  • 您不清楚您在第 1 点中的要求。关于第 2 点 - 检查登录输入字段,以检查它具有的“名称”字段。我是有问题的。
  • 输入字段的名称是“login[login]” ...
  • 您希望在单击链接时提交表单吗?
  • 不,我只想将输入的“登录”值传递给“olvido_contrasena”(这是一个“忘记密码”链接)

标签: ruby-on-rails ruby forms post


【解决方案1】:

基本上——

你点击的链接,并没有提交你创建的表单,但是“提交”按钮可以提交。

当您单击一个链接时,这就是发送 GET 请求。如果您想发送带有表单数据的 post 请求,您可以使用 javascript 事件侦听器在单击链接时提交表单。

由于没有提交表单,因此您将 login[login] 设为 nil。

要使用 javascript 提交表单,您将使用 jquery 执行类似的操作 -

$(".linkClass").click(function(event){
    event.preventDefault(); //This will stop get request.

    $("#formId").submit();
})

【讨论】:

  • 有一种方法可以通过 javascript 获取登录输入元素的值并将其作为参数传递给“link_to”?
【解决方案2】:

在您的示例代码中,登录值实际上是空的:

<%= link_to "Olvid&oacute su clave?", { :controller => 'usuarios', :action => 'olvido_contrasena', :login =>  }, :post => true %>

另外 - "post => true" 不是如何将其变成 POSTed 表单。

通常您会使用 button_to(而不是 link_to),但由于您已经在表单中(并且表单不会嵌套),您可以通过作为 查询字符串参数传递来伪造帖子属性“_method”(是的,它以下划线开头)。所以你的例子会变成:

<%= link_to "Olvid&oacute su clave?", { :controller => 'usuarios', :action => 'olvido_contrasena', :login =>  @usario.login, "_method" => 'post'} %>

现在的问题是该人尚未登录...因此您无法获取他们的“登录名”-链接上方的登录字段不是链接的一部分。因此,当有人在字段中键入内容时,您可能需要添加一些时髦的 javascript 来更新链接字段值。

...但是您的控制器操作应该处理有人尚未输入任何内容的情况。例如,如果 params[:login] 为空。它应该呈现“忘记密码?请在此处输入您的登录名”之类的页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    相关资源
    最近更新 更多