我有一个用户视图和一个租赁视图。 在我的租赁视图中,我试图显示当前用户的名字。我觉得我很接近,但最后一点我无法理解。
这将返回选择列表中的所有用户
<%= f.select :user_id, User.find(:all).collect {|t|
[t.user_name, t.id]} %>
这将返回我当前的用户ID
<%= f.number_field :user_id %>
所以我认为我可以做类似
的事情<%= f.select :user_id, User.find(:user_id).collect {|t|
[t.user_name, t.id]} %>
我希望仅返回选择列表中的当前用户,其ID为值,并在列表中显示其名称。如果我这样做,它会告诉我
Couldn't find User with id=user_id
所以user_id作为文字字符串传递,但我想传递user_id变量,该变量应该是10个。我不知道如何将user_id作为变量传递。
我对ROR相当新,我可能会以完全错误的方式解决这个问题。非常感谢任何帮助。
答案 0 :(得分:0)
find()
想要一个变量,而不是一个符号。 :all
可能不是你想要的。您应该在控制器中编写一个方法,如:
def user(u)
@user = User.find(u)
end
然后在视图中调用方法或类似的东西(我不知道你在这里尝试做什么):
<% user(current_user.id) %>
然后你将有一个@user
对象,你可以玩,即:
<%= f.select :user_id, [[@user.name, @user.id]] %>
答案 1 :(得分:0)
我认为你应该能够做到:
<%= 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
。current_user
。顺便说一句,我真的不明白为什么你想要一个只包含当前用户的选择列表 - 这肯定是你想要实现的,还是我误解了?
答案 2 :(得分:0)
我假设您有一个租借对象,为此您显示表单,我假设它是一个实例变量@rental
,而且我假设在Rental
类中有以下关系< / p>
class Rental
belongs_to :user
end
然后你可以写下以下内容:
f.select :user_id, [[@rental.user.user_name, @rental.user.id]]
希望这有帮助。
关于一个相关但不那么重要的注意事项:为user_name
创建名为user
的列真的很奇怪:我会将该列称为name
,因为它是无论如何,用户。