rails形成post action而不改变路径

时间:2015-11-09 09:27:08

标签: ruby-on-rails forms

我有一个提供联系表单的视图。此联系表单通过javascript呈现。还有一个javascript过滤器,用户可以在其中设置查看选项。(根据设置,谷歌地图上会显示不同的标记。然后用户可以单击标记,然后在视图框中单击一个呈现某些标记的视图按钮信息和地图下方的联系表格)

如果我要制作一个普通表单并使用带有@contact的post方法和联系路由,我必须在调用@contact#create方法后重新呈现整个页面。这意味着将取消设置所有当前用户过滤器选项。我显然可以保存设置,但觉得这很麻烦。

我想要的是联系表单在提交时调用方法而不实际更改路径,但我不知道这是否可能。 (我使用简单的形式,所以最好回答这个问题)

1 个答案:

答案 0 :(得分:2)

由于您的问题非常广泛,我将不得不这样回答:

  

如果可能的话

是的,这是可能的。

您必须使用ajax向服务器发送异步请求。

Ajax A 同步 J avascript A nd < strong> X ml )发送超出典型HTTP范围的请求;您可以发送/接收“隐藏”数据而无需重新加载(这是您想要的):

enter image description here

别担心 - ajax一旦理解就非常简单。

有一个很棒的Railscast here

enter image description here

<强>实施

对于您,您只需要通过ajax(javascript)提交表单。有两种方法可以做到这一点:

  
      
  1. 标准JS(JQuery)
  2.   
  3. Rails UJS(不引人注目的Javascript
  4.   

基本上,javascript充当迷你浏览器,在您的服务器上打开一个网址,处理返回的数据&amp;做你在路上告诉它的事情:

#include <iostream>

using namespace std;

int main()
{
    int pancakes [10];
    int x;
    int largestValue = 0;

    for (int x = 0; x < 10; x++) {
        cout << "Please input the number of pancakes person " << (x + 1) << " has ate.\n";
        cin >> pancakes[x];
    }

    for (int x = 0; x < 10; x++)
        if (pancakes[x] > largestValue)
            largestValue = pancakes[x];

    cout << "The person who ate the most pancakes ate: " << largestValue << " pancakes.\n";

    return 0;
}

然后,您可以使用服务器上相应的控制器操作进行备份:

#include <iostream>

using namespace std;

int main()
{
    int pancakes [10];
    int x;
    int largestValue = 0;

    for (int x = 0; x < 10; x++) {
        cout << "Please input the number of pancakes person " << (x + 1) << " has ate.\n";
        cin >> pancakes[x];
    }

    for (int x = 0; x < 10; x++)
        if (pancakes[x] > largestValue)
            largestValue = pancakes[x];

    cout << "The person who ate the most pancakes ate: " << largestValue << " pancakes.\n";

    return 0;
}

没有太多细节,这是实现您想要的最有效方式。如果需要,我可以详细说明。