Передача параметра в link_to rails 2 - PullRequest
2 голосов
/ 21 июня 2011

Я написал следующую форму:

<% 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] не отправляется ....

Что я могу сделать здесь?

Спасибо!

Я решил свою проблему, добавив новый вид с новой формой после того, как пользователь щелкнет ссылку «забыл пароль».ПРОСТОЕ И ЧИСТОЕ решение.

Ответы [ 2 ]

1 голос
/ 22 июня 2011

В вашем примере кода значение логина фактически пусто:

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

Кроме того, "post => true" - это не то, как сделать это в форме POST.

Обычно вы используете button_to (вместо link_to), но, поскольку вы уже находитесь внутри формы (а формы не вложены), вы можете подделать сообщение, передав параметр строки запроса атрибут "_method" (да, он начинается с подчеркивания). поэтому ваш пример станет:

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

Теперь проблема в том, что человек еще не вошел в систему ... поэтому вы не можете получить его "логин" - и поле для входа над ссылкой не является частью ссылки. Поэтому вам, вероятно, понадобится добавить какой-нибудь забавный javascript для обновления значения поля ссылки, когда кто-то что-то вводит в поле.

... но действие вашего контроллера должно также иметь дело со случаем, когда кто-то еще ничего не набрал. Например, если params [: login] пусто. он должен отображать вид страницы "забыли пароль? хорошо введите здесь имя пользователя".

1 голос
/ 21 июня 2011

В основном -

Вы нажимаете на ссылку, которая не отправляет созданную вами форму, но кнопка "Отправить" может отправить ее.

Когда вы нажимаете на ссылку, это отправляет запрос GET. Если вы хотите отправить запрос с данными формы, вы можете использовать прослушиватели событий javascript для отправки формы по щелчку ссылки.

Поскольку форма не отправляется, вы получаете логин [логин] как ноль.

Чтобы отправить форму с помощью javascript, вы будете делать что-то подобное с jquery -

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

    $("#formId").submit();
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...