状态控制器
respond_to do |format|
format.html
format.js
if @status.present? && @status.valid?
format.json { render json: @status.to_json }
else
format.json { render json: @status.errors.values.join(",") }
end
另一个控制器具有相同的上述代码只需更改@status。
我正在使用Code Climate,因为我正在重复代码警告。
那么如何优化代码?
提前致谢
答案 0 :(得分:2)
您可以在父控制器(或ApplicationController)中添加方法,例如:
def render_valid_resource format, resource
if resource.present? && resource.valid?
format.json { render json: resource.to_json }
else
format.json { render json: resource.errors.values.join(",") }
end
end
然后只需致电render_valid_resource format, @status
顺便说一句,如果你发现自己有更多相似的案例,你可以使用像https://github.com/plataformatec/responders
这样的宝石来研究一种更有条理的方法。答案 1 :(得分:1)
例如如下:
json =
if @status.present? && @status.valid?
@status.to_json
else
@status.errors.values.join(",")
end
format.json { render json: json }
或单行:
json = @status.present? && @status.valid? && @status.to_json || @status.errors.values.join(",")
format.json { render json: json }