Rails:如何将此链接更改为按钮?

时间:2011-12-31 04:12:59

标签: ruby-on-rails

现在我只需点击此链接中的“x”即可在awisprotect_path使用ajax(:remote =>'true')调用方法

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

控制器操作呈现jquery,因此响应包含在视图中的html中

<div class="awishanswer">

</div>

这一切都很好。但是,我没有点击“x”,而是希望用户点击按钮并获得相同的结果。所以我基本上只是想把链接信息

<%= 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 个答案:

答案 0 :(得分:1)

您遇到问题的原因可能是因为您使用form_tag帮助程序使用url生成中的:remote和:方法值,而不是处理表单。正确的用法可能是这样的:

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

但是,Rails已经有一个帮助方法来创建一个按钮来提交名为button_to的数据。它基本上采用与link_to助手完全相同的参数,所以在你的情况下我可能会这样使用它:

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

:方法参数甚至可能被遗漏,因为我认为button_to帮助器默认为POST协议。

答案 1 :(得分:1)

您可以使用一些CSS将链接伪装成一个按钮。这是一个nice article

这可能比部分和形式的所有这些实验更好。 : - )

答案 2 :(得分:1)

视图文件中的

<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 submittedsubmit时,button将为clicked
  2. 该操作将发送部分文件中包含的html。
  3. form update将在表单中提供带有ID的div,并将html代码从操作中发回。
  4. 编辑:部分档案

    <%if @flag%>
    // include some html
    <%else%>
    // include some other html
    <%end%>
    

答案 3 :(得分:0)

我认为你没有正确包装form_tag的选项。尝试这样的事情:

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

使用button_tag可能有也可能没有帮助。