我对rails相当陌生,刚刚开始使用很酷的gems和API。 我已经意识到这个社区重视问题和答案的内容,或者期望它们以特定的方式构建。 提供了提出我问题的短途和长途。 请让我知道这里更喜欢哪个!不过这是一个真正的问题!
简短版本
我有一个 users_controller 和 User 对象,在 rails 应用程序中带有用户名属性。 如何为这些用户创建基于其用户名的动态全局变量? 示例:我希望我的用户(id = 1,first_name = "Rob",用户名 = "rocky"(可作为@rocky调用。 那么在我的Users_controller中会有什么基于下面第一个代码行在终端中为我工作:
@rocky = User.find_by_username("rocky")
WHATGOESHERE = User.find_by_username(params[:username]}
或者我应该以某种形状或形式使用它来代替参数[:用户名]
@"#{user.username}"
以下是我问题的较长版本。 它更详细,更密切地遵循我如何处理这个问题。 第一个...我写的第二篇,更简洁,但这并不总是人们想要的......请让我知道本网站上哪个是首选的。 谢谢!!
长版
我需要澄清一些事情。 我正在使用一个名为"has_friendship"的 gem 在我的用户之间建立友谊(链接到 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中有以下内容,可以根据用户的用户名属性为用户分配全局变量......
@"#{params[:username]}" = User.find_by_username(params[:username])
这,尤其是左侧,对我来说一点也不对劲。 所以我在谷歌上看了一堆,我能找到的唯一另一件事看起来是正确的方法是使用"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)