Rails 一个 User.find 的问题

zerocool · 2013年09月24日 · 最后由 ZeroCool 回复于 2013年09月25日 · 2269 次阅读

请教各位一个问题:我想在页面上输出一个用户的用户名,当前页面数据对象是@stuff,所以要用 User.find 先找到该用户数据对象,但有可能该用户已被删除,所以逻辑上是,如果能拿到数据结果,就显示用户名,否则显示“该用户已注销”。

很简单的一个问题,但不知道哪里不对,就是搞不定。@stuff.ower_id是 1,这个用户已删除,所以逻辑上 owner 就是 false,直接输出“该用户已注销”。但我这么写的话,页面总是报错,说是找不到该页面;如果我把@stuff.ower_id换成 3,就能正常工作。是我代码写错了,还是 ActiveRecord 遇到 not_find 错误的路由问题?

请大家伙儿帮忙给掌掌眼,多谢!

<% owner = User.find @stuff.ower_id %>
<% if owner != nil %>
<%= owner.user_name %>
<% else %>
<span>该用户已注销</span>
<% end %>

HI 首先用find方法时候要注意,没有找到的话是会抛出一个RecordNotFound错误的 你这里应该用find_by_id 还有就是不要在 view 里面写查询,应该在 controller 里面拿到 @owner 这个实例变量

#1 楼 @tumayun 好的,多谢多谢!

controller: @owner = User.find_by_id(@stuff.owner_id)

view: <%= @woner.present? ? @owner.user_name : '该用户已注销' %>

test: 最好配上个测试

建议:代码尽量简洁,可读性强一些。

😋

#3 楼 @liwei78 Thanks,正在熟悉 mvc 风格。

注销的用户不应该被真正删除。加个标记就可以了。

#5 楼 @o_0 实际上应该是这样,不过我还没有去修改 model,脚手架刚建起来。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号