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

时间:2017-07-09 07:04:40

标签: ruby-on-rails dynamic global-variables instance-variables

我对rails很新,我只是开始使用酷炫的宝石和API。我已经意识到这个社区重视问题和答案的内容,或者预期它们是以特定的方式构建的。提出了问我问题的简短方法。请告诉我哪个更受欢迎!这是一个真正的问题!

短片

我在rails应用中有一个users_controller和User对象,其中包含username属性。如何根据用户名动态创建这些用户的全局变量?示例:我希望我的用户(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}"

以下是我的问题的较长版本。它更详细,更详细地说明了我如何处理这个问题。第一个......我写的第二个,更简洁,但并不总是人们想要的...请告诉我这个网站首选哪个。谢谢!

LONG VERSION

我需要澄清一些事情。我使用名为“has_friendship”的宝石在我的用户之间建立友谊(链接到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)

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

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

这个,尤其是左侧,对我来说并不合适。所以我在google上看了一堆,我唯一能找到的其他东西看起来正确的方法是使用“instance_variable_set”,但我所看到的一切对我的情况没有任何意义。 ..(像往常一样..哈)

1 个答案:

答案 0 :(得分:0)

好的,我从您的问题中了解到,您希望使用friend_request方法关联两个用户。

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

id = 1 first_name =' Rocky'用户名='岩石'

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

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

OR

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

此外,如果要将它们分配给实例变量,则不必创建与用户名值对应的实例变量 您只需将它们分配到@user@requested_user,然后再分配到

@user.friend_request(@requested_user)