Rails按钮,remote_function。可能没有Ajax?

时间:2010-07-06 21:05:47

标签: ruby-on-rails

我想创建一个非常简单的搜索部分。它有一个文本框,用于查询和搜索db。我可以在不使用AJAX或JS的情况下创建remote_function调用吗?我可以完全保留它“Rails-ee”吗?

<%= text_field_tag "search_term",'', :size => 10 %>
<%= button "search", :onclick => remote_function( :url => {:action => :fill_in_lots }, 
                                                  :with => "search_term" ) %>

1 个答案:

答案 0 :(得分:0)

这不是问题,您需要使用一种称为正式链接的技术。而不是按钮,你用一个提交按钮。下面是我用于此的帮助程序代码:

def formal_link_to(*args, &block)
    options = html_options = name = nil
    if block_given?
      options = args.first
      html_options = args.second
      name = capture(&block)
    else
      name         = args.first
      options      = args.second || {}
      html_options = args.third
    end

    method = html_options.delete(:method) || "POST"
    method = method.to_s.upcase
    url = url_for(options)

    html = "<form class=\"formal-link\" action=\"#{url}\" method=\"post\">"
    html += "<input type=\"hidden\" value=\"#{form_authenticity_token}\" name=\"authenticity_token\" />" 
    html += "<input type=\"hidden\" value=\"#{method}\" name=\"_method\" />" 
    html += link_to(name, "#", html_options)
    html += "</form>"

    if block_given?
      concat(html)
    else
      return html
    end
  end

你像普通的link_to一样使用这个帮助器,但你可以传递额外的选项:第二个哈希中的方法。例如:

<%= formal_link_to "Fill in lots", { :action => "fill_in_lots" }, { :method => :post } -%>

说明: 这当然会使整页重新加载,但不使用JavaScript是不可避免的。 我假设动作fill_in_lots暴露给POST请求。在GET的情况下,您可以使用普通的link_to帮助程序。