为 rails 项目中的 ruby 个对象创建动态变量

creating dynamic variable for ruby objects in rails project

我是 rails 的新手,刚刚开始使用很酷的 gems 和 API。我已经意识到这个社区重视问题和答案的内容,或者期望它们以特定的方式构建。提供了问我问题的捷径和长途。请让我知道这里首选哪个!这是一个真正的问题!

简短版本

我在 rails 应用程序中有一个 users_controller 和具有用户名属性的用户对象。如何根据这些用户的用户名动态创建全局变量?示例:我希望我的用户 (id = 1, first_name = "Rob", username = "rocky") 可以作为@rocky 调用。那么在我的 Users_controller 下面会发生什么,这是基于下面在终端中为我工作的第一行代码:

@rocky = User.find_by_username("rocky")

WHATGOESHERE = User.find_by_username(params[:username]} 

或者我应该以某种形式使用它来代替 params[:username]

@"#{user.username}"

下面是我的问题的较长版本。它更详细,更密切地关注我是如何处理这个问题的。第一个……我写的第二个,更简洁,但这并不总是人们想要的……请让我知道在这个网站上哪个更受欢迎。谢谢!!

长版

我需要澄清一些事情。我正在使用一个名为 "has_friendship" 的 gem 在我的用户之间建立友谊(link 到 gem- https://github.com/sungwoncho/has_friendship)。

首先,这是如何请求好友的文档示例,从创建用户开始。

@mac = User.create(name: "Mac")
@dee = User.create(name: "Dee")

# @mac sends a friend request to @dee
@mac.friend_request(@dee)

这是我第一次感到困惑的地方。我的用户没有 "name" 字段。但没关系。我设法弄清楚我只需要像他们一样为我创建的用户分配全局变量......因为我的用户将在他们的 "username" 属性后面相互交互。那么第一个问题,如何为每个用户分配一个动态变量名称?在文档中,它们在名称 "Mac" 和 "Dee." 中进行硬编码我需要在创建对象时创建这个全局变量。所以我的计划是在控制器中执行此操作.在这里,我已经在 users#show

中定义了@users 和@user
@users = User.all
@user = User.includes(:wallet).find_by_id(params[:id])

所以我的想法是,等式的左边应该是你所命名的名称,右边是该名称所指的名称。所以对于右边,我想放

User.find_by_username(params[:username])

与在终端中一样,如果我用引号中的实际用户名替换括号中的内容,它会显示该用户的信息。那么左边怎么写呢。我认为左侧是这样的:

@"#{params[:username]}"

因此,目前我的 users_controller 中有以下内容,可以根据用户的用户名属性为我的用户分配全局变量...

@"#{params[:username]}" = User.find_by_username(params[:username])

这个,尤其是左边,我看不太对劲。所以我环顾了 google 一堆,我能找到的唯一另一件事看起来像正确的方法是使用 "instance_variable_set" 但我看过的一切都没有完全理解我的情况......(像往常一样......哈)

好的,我从你的问题中了解到你想使用 friend_request 方法来关联两个用户。

为此,您不需要将它们分配给任何变量。您可以通过这样的方式直接执行此操作 - 假设有两个用户的

id=1 first_name='Rocky' 用户名='rocky'

id=2 first_name='Nimish' 用户名='nimish'

User.find_by(username: 'rocky').friend_request(User.find_by(username: 'nimish'))

User.find_by_username('rocky').friend_request(User.find_by_username( 'nimish'))

此外,如果你想将它们赋值给实例变量,则不需要创建对应于用户名值的实例变量 您可以简单地将它们分配给 @user@requested_user 然后

@user.friend_request(@requested_user)