【问题标题】:Rails - passing parameters to sessionRails - 将参数传递给会话
【发布时间】:2015-01-25 03:19:54
【问题描述】:

我不希望参数显示在 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 并获得不允许的信息。

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

【问题讨论】:

  • 构建一个表单,而不是 link_to,该表单将提交给控制器中的新操作,该操作将设置会话值并重定向到正确的页面。
  • 我可以想象,如果我只有一个内存,它可能会工作,但我有几个 。这意味着我需要为每个 mem 提供一个表格?不知怎的,我无法想象
  • 您可以为每个人构建迷你表单。 :)
  • 你能提供一个小例子吗?是不是类似于 {:controller => "groups",:action=> "store in session"} %>
  • 另一种选择是使用可见参数创建link_to,操作将通过保存到会话并在没有此参数的情况下重定向到同一页面来对其做出反应,但是这比表单安全得多。

标签: ruby-on-rails session cookies


【解决方案1】:

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

在会话中放很多东西不是好的做法,因为它会增加您的请求大小(因为会话 cookie 会在每个请求上发送)。正如 cmets 中提到的,您可以使用表格。 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 请求并且它不需要任何 url 路径参数。

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

【讨论】:

  • 我在使用 button_to 时得到的唯一参数是参数:{"authenticity_token"=>"ldRS+RCi82LYZtOXHy9Xj1XpkaWDc9micjjedlD9n2I=", "locale"=>"en"} 并且没有 grp_mem。所以不知道怎么抓 grp_mem
  • @Tonja 对大量编辑感到抱歉,在检查代码后,有一种方法可以指定任意表单参数。
  • 如果我打印出参数,我会再次得到:params {"authenticity_token"=>"ldRS+RCi82LYZtOXHy9Xj1XpkaWDc9micjjedlD9n2I=", "action"=>"edit_group_member", "controller"=>"groups", "locale"=>"en"} 它没有 grip_mem
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多