我有before_action
这样的方法:
def current_user
@current_user ||= User.find(:id => session[:id])
end
我称之为这样的方法:
def get_food user
food = Food.find(:id => user.id)
end
这很好,但我想添加异常处理。
当用户为零时,我想使用@current_user
:
def get_food user
food = Food.find(if user is nil i want to use @current_user.id)
end
当然,我可以这样写:
def get_food user
if user.nil?
food = Food.find(@current_user.id)
else
food = Food.find(user.id)
end
或者,这是最好的方法吗?
def get_food user
food = Food.find(user == nil? @current_user.id : user.id)
end
我很好奇有没有比在param中添加简单if
语句更好的方法?
答案 0 :(得分:4)
我能想到的最短的一行是这样的:
Food.find((user || current_user).id)
Food.find(user.try(:id) || current_user.id)
Food.find(user ? user.id : current_user.id)
不确定这是否真的是可读性的推动力。我更喜欢这样的事情:
def get_food(user)
user ||= current_user
Food.find(user.id)
end
答案 1 :(得分:0)
您可以使用三元运算符使其成为一行:
user ? Food.find(user.id) : Food.find(@current_user.id)
答案 2 :(得分:0)
arrays
food = Food.where(id: [@current_user.try(:id),user.id]).first
答案 3 :(得分:0)
你可以试试这个:
food = Food.find(user.nil? ? @current_user.id : user.id)
答案 4 :(得分:0)
默认参数怎么样?
def get_food(user = @current_user)
food = Food.find(user.id)
end
如果您在没有参数
的情况下调用它,它将起作用something.get_food # notice the method is called with no params
如果您希望它通过nil
也能正常工作,您还应该添加:
def get_food(user = @current_user)
food = Food.find((user || @current_user).id)
end
但奇怪的是食物和使用者有相同的ID ... 也许正确的查询是:
food = Food.find_by_user_id((user || @current_user).id)
或者,如果用户只有一种食物:
foods = Food.where(user: (user || @current_user)) # rails 4, :user => (user || @current_user) for rails 3
答案 5 :(得分:0)
Food.find(user.id rescue @current_user.id)