在Rails中访问另一个控制器中的一个控制器变量

 陈翔瑋文爱奕德 发布于 2023-02-10 13:22

我有一个C编程背景,我正在学习侧面项目的Ruby/Rails.目前,我正在努力了解变量的范围是如何工作的.这是我遇到的问题的一个例子.我有一个用户和一个产品型号.在Product DB中,我存储了不同的产品,其中一个字段是userid字段,该字段与存储在User表中的用户ID相匹配.在用户登录后 - 我显示用户的姓名,电子邮件等(这存储在@current_user中),然后有一个链接显示用户拥有的不同产品.我通过users/show.html.erb中的以下代码执行此操作:...

名称: <%= @ current_user.name%>

... <%= link_to"Products",products_path,id:"products"%>

到现在为止还挺好.当我点击"产品"链接时,它将我带到products/index.html.erb并执行以下代码(我想过滤此显示以仅显示@ current_user.userid拥有的产品.我该怎么做?下面的代码给我一个运行时错误,因为@current_user评估为nil我相信.如果我删除了"if"子句,那么显示的所有产品都不是我想要的.会感激任何提示.


<% @products.each do |product| %>
  
    <%= product.userid if product.userid == @current_user.userid %>
    <%= product.productName if product.userid == @current_user.userid %>
    <%= product.productLink if product.userid == @current_user.userid %>

谢谢,

1 个回答
  • 我打算将此作为评论,但我认为这是值得回答的.不仅仅是rails,而是整个互联网,要理解的是HTTP是无状态的.这意味着在您的控制器中,您可以获取用户的信息,使用数据库中的所有内容构建一个网页,然后将其发送给他们.然后他们在页面上执行某些操作并发送请求以获取另一页或更多数据,并且您的rails应用程序就像"哦,你!你是谁?" 因为所有那些填充了很好信息的变量都已消失了.每次你的应用程序收到请求时,它都会创建一个正在使用的控制器的全新实例,然后将其中的所有内容与其中的所有内容一起删除.这一点非常重要,因为目前可能会有数千或数百万人登录您的终极飞盘联盟网站,试图找出周六谁在哪里比赛.并且您希望向正确的人提供正确的信息,您不能认为您上次发送信息的人是同一个人,现在要求您提供新信息.

    因此,我们需要使用session每次发送页面时传递给客户端浏览器的一些信息,浏览器会在每次请求时将其发送给您.您在会话中放置了足够的信息,以便在收到响应时可以使用它来重建服务器所需的内容.我将使这个变得非常简单,然后向您推荐Rails安全指南,您可以在其中获取更重要的信息.实际上,我只会使用他们的例子:

    您可以通过以下方式将用户ID添加到会话中:

    session[:user_id] = @current_user.id
    

    然后以这种方式取回它:

    @current_user = User.find(session[:user_id])
    

    然后使用您的用户模型(在本例中)从数据库中获取所需的特定信息.这是Rails指南的另一个链接,因为它非常好,我将它链接两次:http://guides.rubyonrails.org/security.html#what-are-sessions-questionmark

    如果你正在做的事情,需要一个密码,您可以使用像宝石devise,指示在这里,但被警告,它完全劫持你的用户模型,您的会话控制器,一些看法,基本上与登录和身份万物.它不容易定制,但它使所有这些东西和事情变得更加复杂,实现起来非常简单.如果您不需要任何用户名或密码,并且您正在做一些非常简单的事情,请跳过特殊的宝石并自己使用会话.

    2023-02-10 13:25 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有