我有两个非附加模型 – 里程碑和用户. (我的里程碑实际上属于公司,公司有许多里程碑.)
@H_403_2@每个里程碑都有一个负责它的用户 – 在我的里程碑表单中,我使用以下内容来查找和选择用户:
<%= f.input :milestone_user,:as => :select,:collection => User.find(:all,:order => "name ASC") %>@H_403_2@这给了我一个user_id,我在一个视图中将其转换为名称,如下所示:
<%= User.find(milestone.milestone_user).name %>@H_403_2@这工作正常,但我现在想在几个视图中使用它,不喜欢在我的视图中查询. @H_403_2@我试图将其移动到我的用户模型中,但我不知道如何去做.我在模型中试过这个:
scope :username,lambda { where("id = milestone_user")}@H_403_2@这在我看来:
<%= User.username.first_name %>@H_403_2@但它抱怨first_name的未定义方法.. @H_403_2@提前致谢
解决方法
将其添加到您的Milestone模型:
def username User.find(milestone_user).try :name end@H_403_2@并在您的视图中使用它:
<%= milestone.username %>@H_403_2@但这不是有效的,更好的方法是坚持belongs_to:user,:foreign_key => “milestone_user”,:class_name => Milestone模型中的“用户”.您不必填写关联,您仍然可以在没有分配用户的情况下创建里程碑. @H_403_2@belongs_to还允许您在视图中使用这样的代码:
<%= milestone.user.name %>@H_403_2@无需为您要访问的每个用户属性创建其他方法.