微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby – 将查询从视图移动到模型

我有两个非附加模型 – 里程碑和用户. (我的里程碑实际上属于公司,公司有许多里程碑.)

每个里程碑都有一个负责它的用户 – 在我的里程碑表单中,我使用以下内容来查找和选择用户

<%= f.input :milestone_user,:as => :select,:collection => User.find(:all,:order => "name ASC") %>

这给了我一个user_id,我在一个视图中将其转换为名称,如下所示:

<%= User.find(milestone.milestone_user).name %>

这工作正常,但我现在想在几个视图中使用它,不喜欢在我的视图中查询.

我试图将其移动到我的用户模型中,但我不知道如何去做.我在模型中试过这个:

scope :username,lambda { where("id = milestone_user")}

这在我看来:

<%= User.username.first_name %>

但它抱怨first_name的未定义方法..

提前致谢

解决方法

将其添加到您的Milestone模型:
def username
  User.find(milestone_user).try :name
end

并在您的视图中使用它:

<%= milestone.username %>

但这不是有效的,更好的方法是坚持belongs_to:user,:foreign_key => “milestone_user”,:class_name => Milestone模型中的“用户”.您不必填写关联,您仍然可以在没有分配用户的情况下创建里程碑.

belongs_to还允许您在视图中使用这样的代码

<%= milestone.user.name %>

无需为您要访问的每个用户属性创建其他方法.

原文地址:https://www.jb51.cc/ruby/268330.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐