Rails - 将参数传递给会话

时间:2015-01-22 11:00:22

标签: ruby-on-rails session cookies

我不希望参数显示在url中。因此一个选项

<%= link_to mem, edit_group_member_groups_path(:grp_mem => mem)%>

不适合我。

到目前为止,我已通过以下方式保存了浏览器Cookie中的参数:

<script>
$( function() {         
    $(".grp_member").on("click", function(e) {     
        $.cookie("grp_mem",$(this).attr("grp_mem"),{ path: '/' });                              
    });
})
</script>

<%= link_to mem, edit_group_member_groups_path, :grp_mem => mem, :class => "grp_member" %>

但是每个人都可以修改浏览器cookie并获取不允许的信息。

所以,我的下一个想法是在会话中保存参数。但是,我不知道如何在没有url的情况下将参数传递给session。是否可以使用javascipt?如果有,怎么样?或者还有其他选择吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

你不能把东西放在客户端的会话中。即使你使用cookie作为会话存储(顺便说一下这是默认的),因为Rails会验证会话cookie。

在会话中放置大量内容并不是一种好的做法,因为它可以增加您的请求大小(因为会话cookie是在每次请求时发送的)。正如评论中提到的那样,您可以使用表格。 Rails为此提供了一个方便的包装器:button_to

您可以将其用作link_to

的替代品
<%= button_to mem, { action: :edit, controller: :member_groups }, 
              { :class => "grp_member", params: { grp_mem: mem } } %>

或者

<%= button_to mem, edit_group_member_groups_path, 
              { :class => "grp_member", params: { grp_mem: mem } } %>

您必须确保edit操作可以处理POST请求,并且不需要任何网址路径参数。

您可以根据this pull request指定额外的参数。