Rails: Как превратить эту ссылку в кнопку? - PullRequest
0 голосов
/ 31 декабря 2011

Прямо сейчас я могу вызвать метод, используя ajax (: remote => 'true') на awisprotect_path, просто нажав на "x" в этой ссылке

<%= link_to "x", 
    awisprotect_path,
  :remote => true,
  :method => :post,
  %>

Действие контроллера отображает jquery, поэтому ответ включается в html в представлении

<div class="awishanswer">

</div>

Это все работает нормально. Однако вместо того, чтобы нажимать «х», я хотел, чтобы пользователь нажал кнопку и получил тот же результат. Поэтому я просто хотел поставить ссылку info

<%= link_to "x", 
    awisprotect_path,
  :remote => true,
  :method => :post,
  %> 

в эту кнопку

 <button class="btn small primary" >
                    check
</button>

Итак, я создал эту форму и поместил ее в частичную

<%= form_tag(:controller => "sessions", :action => "awisprotect", :remote => true, :method => "post") do %>


 <button type="submit" class="btn small secondary">check awis</button>

 <% end %>

но проблема в том, что действие контроллера, которое отображает js, не помещает результат действия в html div. Вместо этого он перенаправляет на пустую страницу, а затем печатает метод jquery с результатом, который я проверял с помощью действия контроллера. пустая страница просто показывает это ...

$('div.awishanswer').html(' html to be inserted in div');

Кто-нибудь может объяснить?

В ссылке написано

http://localhost:3000/awisprotect?method=post&remote=true

Ответы [ 4 ]

1 голос
/ 31 декабря 2011

в файле просмотра

<div class="awishanswer" id="awishanswer">
    <% form_remote_tag :url => {:controller => "sessions", :action => "awisprotect"}, 
                    :html => {:method => "post"}, :update => "awishanswer" do %>
        <input type="submit" class="btn small primary" value="check" />
    <% end %>
</div>

в действии

def awisprotect
    @flag = params[:flag] // suppose sending parameter flag from form
   // do something
   render :partial => 'partial file containing html to send to view'
end
  1. form будет submitted, когда submit button равно clicked.
  2. действие отправит HTML, содержащийся в частичном файле.
  3. form будет update div с идентификатором, предоставленным в форме с html кодом, отправленным обратно из действия.

РЕДАКТИРОВАТЬ: частичный файл

<%if @flag%>
// include some html
<%else%>
// include some other html
<%end%>
1 голос
/ 31 декабря 2011

Причиной возникновения проблемы, вероятно, является то, что вы используете хелпер form_tag, который использует значения: remote и: method внутри генерации URL, а не обрабатывается в форме.Правильное использование, вероятно, будет выглядеть так:

<%= form_tag({:controller => "sessions", :action => "awisprotect"}, 
              :remote => true, 
              :method => "post")

Однако в Rails уже есть вспомогательный метод для создания кнопки для отправки данных с именем button_to.В основном он принимает те же аргументы, что и помощник link_to, поэтому я, вероятно, использовал бы его в вашем случае так:

<%= button_to "x", awisprotect_path, :remote => true, :method => :post %>

Аргумент: method может быть даже пропущен, потому что я думаю, что button_to helperпо умолчанию используется протокол POST.

1 голос
/ 31 декабря 2011

Вы можете замаскировать ссылку как кнопку, используя немного CSS.Вот хорошая статья .

. Это может быть лучше, чем все эти эксперименты с частичными формами.: -)

0 голосов
/ 31 декабря 2011

Я думаю, вы не правильно обернули опции для form_tag. Попробуйте что-то вроде этого:

form_tag( { :controller => :sessions, :action => :awisprotect, :method => post }, { :remote => true } ) do ....

Может также помочь, а может и не помочь button_tag.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...