Jen*_*unt 7 ruby ruby-on-rails-3
我有两个非附加模型 - 里程碑和用户.(我的里程碑实际上属于公司,公司有许多里程碑.)
每个里程碑都有一个负责它的用户 - 以我的里程碑形式,我使用以下内容来查找和选择用户:
<%= f.input :milestone_user, :as => :select, :collection => User.find(:all, :order => "name ASC") %>
Run Code Online (Sandbox Code Playgroud)
这给了我一个user_id,我在一个视图中将其转换为名称,如下所示:
<%= User.find(milestone.milestone_user).name %>
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我现在想在几个视图中使用它,不喜欢在我的视图中查询.
我试图将其移动到我的用户模型中,但我不知道如何去做.我在模型中试过这个:
scope :username, lambda { where("id = milestone_user")}
Run Code Online (Sandbox Code Playgroud)
这在我看来:
<%= User.username.first_name %>
Run Code Online (Sandbox Code Playgroud)
但它抱怨first_name的未定义方法..
提前致谢
将此添加到您的Milestone模型:
def username
User.find(milestone_user).try :name
end
Run Code Online (Sandbox Code Playgroud)
并在您的视图中使用它:
<%= milestone.username %>
Run Code Online (Sandbox Code Playgroud)
但这不是有效的,更好的方法是坚持belongs_to :user, :foreign_key => "milestone_user", :class_name => "User"你的Milestone模型.您不必填写关联,您仍然可以在没有分配用户的情况下创建里程碑.
这belongs_to也允许你在你的视图中使用这样的代码:
<%= milestone.user.name %>
Run Code Online (Sandbox Code Playgroud)
无需为您要访问的每个用户属性创建其他方法.
| 归档时间: |
|
| 查看次数: |
262 次 |
| 最近记录: |