Ruby on rails 我怎样才能提高我的;“新名称”;方法
我是一名学生,我收到了一份备忘录(没有解释) 我下面的代码有缺陷,可以做得更好。您将如何改进我的Ruby on rails 我怎样才能提高我的;“新名称”;方法,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,我是一名学生,我收到了一份备忘录(没有解释) 我下面的代码有缺陷,可以做得更好。您将如何改进我的控制器#newname方法?谢谢你抽出时间 class ReviewController < ApplicationController def index @reviews = Review.all.order(created_at: :desc) end def newname @review = Review.find(param
控制器#newname
方法?谢谢你抽出时间
class ReviewController < ApplicationController
def index
@reviews = Review.all.order(created_at: :desc)
end
def newname
@review = Review.find(params[:id])
if @review.update_attribute(:title, sanitize(params[:title]))
format.json { render json: { status: 200 } }
else
format.json { render json: { status: 500 } }
end
end
end
class ReviewController
最大的缺陷是update\u attribute
跳过所有验证,因此很少/永远不会执行else语句。将其更改为:
@review.name = sanitize(params[:title])
if @review.save
#...
而且应该更好。我想你也许可以做一些类似的事情:
class ReviewController < ApplicationController
def index
@reviews = Review.all.order(created_at: :desc)
end
def newname
@review = Review.find(params[:id])
if @review.update(:title => sanitize(params[:title]))
render json: @review
else
render :json => { errors: @review.errors.full_messages }, status: 422
end
end
end
<代码>类修订控件- 状态码
- 用于更新的方法
- 错误
class ReviewController{:errors=>@review.errors.full_messages},:status=>422
结束
结束
私有的
def set_审查
@review=review.find(参数[:id])
结束
def review_参数
参数要求(:审查)。许可证(:标题)
结束
结束
reviewname方法在哪里?@locoboy抱歉,我是说newname方法第一步是将newname
方法重命名为update
。这将更符合REST最佳实践,而不是有一个不直观的自定义路线。我投票将这个问题作为离题来结束,因为这是一个明确的代码审查请求。我们有一个SE站点用于代码审查。要完成回答:代码500是为机器错误保留的,如果资源没有更新,您应该使用422
def newname
@review = Review.find(params[:id])
@review.title = sanitize(params[:title])
if @review.save
format.json { render json: { status: 200 } }
else
render :json => {:errors => @review.errors.full_messages}, :status => 422
end
end
class ReviewController < ApplicationController
before_action :set_review, only [:newname] #list additional methods as needed...
...
def newname
#@review is retrieved from set_review
if @review.update(review_params)
format.json { render json: { status: 200 } }
else
render :json => {:errors => @review.errors.full_messages}, :status => 422
end
end
private
def set_review
@review = Review.find(params[:id])
end
def review_params
params.require(:review).permit(:title)
end
end