如何在link_to路径中获取变量

时间:2014-02-10 22:42:37

标签: javascript jquery ruby-on-rails ajax

我正在尝试在以下link_to调用中使用变量:

<%= link_to '<button type = "button">Players</button>'
    .html_safe, live_players_path(:Team => @tmf) %>

但每次我点击它时它不再具有在此处设置的变量的值:

<select id = "FilterTm">
    <option>Select a Team...</option>
<% Abbrv.order("Team").each do |abbrv| %>
    <option><%= abbrv.Team %></option>
<% end %>
</select>

使用ajax调用:

$(document).ready(function(){
    $('#FilterTm').change(function(){
        Tm = $('#FilterTm').val();
        SelectTm = true;
        $.ajax (
            {
                url: "http://localhost:3000/live_players.json' +
                    '?TmFilter="+Tm+"&Selected="+SelectTm,
                type: "get",
                dataType: "json",
                cache: true,
                success: function(data) {
                    alert("Loading Players....");
                },
                error: function(error) 
                {
                    alert("Failed " + console.log(error) + " " + error);
                }
            });
    });
});

总而言之,我从select下拉列表中选择一个Team,它触发ajax,它在控制器中设置@tmf变量,但是当单击link_to时,变量(@tmf)为nil。如何让变量保持不变以便以后使用?

2 个答案:

答案 0 :(得分:1)

这会在服务器和服务器上呈现在用户的第一次请求期间发送给客户端:

<%= link_to '<button type = "button">Players</button>'
    .html_safe, live_players_path(:Team => @tmf) %>

ajax请求是一个单独的请求。在ajax请求期间更改服务器上的@tmf只会更改服务器上的@tmf。它必须发送给客户端。您必须使ajax请求的服务器端将新的@tmf值发送到客户端,然后编写自定义的javascript来设置href的值。像这样:

这里不需要使用导轨......

<a id="playerBtn"><button type="button">Players</button></a>

javascript伪代码:

var playerBtn = $("#playerBtn");    

...

success: function(data) {
  alert("Loading Players....");
  playerBtn.href= "url/?Team=" + data.tmf;
},

答案 1 :(得分:0)

对于其他看到这篇文章的人我真的刚刚用过:

$('selector').attr('href', 'url');

选择器是元素,url是请求的信息。