我希望使用带有Ruby on Rails的.find()返回单个结果
我有一个用户视图和租赁视图。 在我的租赁视图中我试图显示当前用户的名字。 我觉得我很接近,但最后一点我无法解决。
这将返回选择列表中的所有用户
这将返回我当前的用户ID
所以我觉得我可以做点什么
我只希望在选择列表中返回当前用户,其id为值,列表中的名称。 如果我这样做,它会告诉我
Couldn't find User with id=user_id
所以user_id作为文字字符串传递,但我想传递user_id变量,该变量应该是10个。我不知道如何将user_id作为变量传递。
我对ROR很新,我可能会以完全错误的方式解决这个问题。 任何帮助深表感谢。
我假设你有一个租赁对象,你为它显示表单,我假设它是一个实例变量@rental
,而且我假设你的Rental
类里面有以下关系
class Rental belongs_to :user end
然后你可以写下面的内容:
f.select :user_id, [[@rental.user.user_name, @rental.user.id]]
希望这可以帮助。
在一个相关但不太重要的注意事项:为user
一个名为user_name
的列真的很奇怪:我会将该列name
,因为它仍然是用户的一部分。
find()
想要一个变量,而不是一个符号。 并且:all
可能都不是你想要的。 您应该在控制器中编写一个方法,如:
def user(u) @user = User.find(u) end
然后在视图中调用方法或类似的东西(我不知道你在这里尝试做什么):
<% user(current_user.id) %>
然后你将拥有一个你可以玩的@user
对象,即:
<%= f.select :user_id, [[@user.name, @user.id]] %>
我想你应该能做到:
<%= f.select :user_id, User.find(f.object.user_id).collect {|t| [t.user_name, t.id]} %>
这对我来说似乎有些奇怪。 我也想过:
- 您的对象与相关用户具有正确的关联,在这种情况下,您应该能够执行
f.object.user.user_name
和f.object.user.id
。 - 如果您真的想要当前登录的用户,您可能应该询问您的身份validation框架/代码以供参考。 例如,如果您使用的是Devise,那么它将是
current_user
。
顺便说一句,我真的不明白为什么你想要一个只包含当前用户的选择列表 – 这肯定是你想要实现的,还是我误解了?