我希望使用带有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_namef.object.user.id
  • 如果您真的想要当前登录的用户,您可能应该询问您的身份validation框架/代码以供参考。 例如,如果您使用的是Devise,那么它将是current_user

顺便说一句,我真的不明白为什么你想要一个只包含当前用户的选择列表 – 这肯定是你想要实现的,还是我误解了?