在 Rails 中,我可以在不在控制器中明确查找的情况下查找关系吗?

In Rails, can I lookup a relation without explicitly looking it up in the controller?

我正在使用 Rails 4.2.5。在我的模型中,我的用户有一个属性“avatar_file_id”,它链接到定义了文件名的 table。 “avatar_files”table 具有字段

id
file

当用户登录后,我想在我的页面上显示头像图片,但我不知道如何做。在我的控制器中,我引用了登录用户 (@current_user),所以我有

                <%= image_tag "avatar_images/#{current_user.avatar_file_id}", alt: current_user.name %>

但很明显,这只会尝试查找文件名是 id 的文件,这不是设置方式。我是否需要在我的控制器中明确查找图像文件,然后在页面上包含该变量,或者是否有一些更简单的方法来获取仅给定用户对象的图像路径?

谢谢,-戴夫

你可以这样做

<%= image_tag "avatar_images/#{Avatar.find(current_user.avatar_file_id).file}", alt: current_user.name %>

但是你跳过了很多保护措施来这样做(即,如果用户没有上传头像图片怎么办?)如果你把这类东西放在你的视图中,事情真的会开始变得混乱。

通常,您希望视图中的逻辑尽可能少,因为调试 html/Ruby 比控制器中的纯 Ruby 难得多,因此最好只在控制器中加载对象,然后在变量中传递它。