我有一个以网格格式显示信息的页面。每个网格图块中显示的内容取决于:
我正在使用AJAX向控制器发送用户点击的内容并获取新内容。
# Simplified pseudocode example
def get_tile_content
tile_objects = []
if current_user.present?
if params[:user_selected_content] == 'my stuff'
tile_objects = [... some model scope source here...]
elsif params[:user_selected_content] == 'new stuff'
tile_objects = [... some model scope source here...]
elsif params[:user_selected_content] == 'other stuff'
tile_objects = [... some model scope source here...]
end
else
tile_objects = [... some model scope source here...]
end
render :json => tile_objects.to_json || {}
end
有关如何以不同方式处理此问题的任何想法?我尝试将复杂性转移到模型上,但我发现它的可读性更低,更难以弄清楚发生了什么。
答案 0 :(得分:1)
看起来像是case
声明的一个体面的案例(......看看我在那里做了什么?; P)
def get_tile_content
tile_objects = []
if current_user.present?
tile_objects = case params[:user_selected_content]
when 'my stuff' then Model.my_stuff
when 'new stuff' then Model.new_stuff
when 'other stuff' then Model.other_stuff
end
else
tile_objects = Model.public_stuff
end
render :json => tile_objects.to_json || {}
end
有时需要个案陈述。真的不能说这是不是因为我无法看到你的应用程序的更大设计,但这至少会将它清理一点,更少,更容易阅读,取决于你的风格偏好。
如果您愿意,可以将case语句包装到自己的方法中,并将参数的值传递给它。
另一个样式点是你通常不会在ruby方法名称的开头使用get_
。假设.blah=
是一个设定者而.blah
是一个吸气剂,因此.get_blah
是多余的。