轨道上的红宝石 - 如何改进我的"newname"方法



我是一名学生,我得到了备忘录(没有解释)我下面的代码有bug,可以做得更好。你如何改进我的controller#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

最大的缺陷是update_attribute跳过所有的验证,因此,您的else语句很少或永远不会被执行。改为:

@review.name = sanitize(params[:title])
if @review.save
  #...

以BroiSatse的回答为基础,我肯定会使用save而不是update_attribute。我还将返回发生的错误,以便用户可以解析或显示它们。如果你在Rails 4上,使用强参数(在控制器的私有方法中声明)

Rails 3:

 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
Rails 4

  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

我想你也许可以这样做:

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

这个想法是保持"在轨道上",让惯例为你工作。

指向

    <
  • 状态代码/gh>
  • 方法用于更新
  • <
  • 错误/gh>

相关内容

  • 没有找到相关文章

最新更新