请求对象的方法的最佳实践

韦尔斯曼

阅读并做一些RoR教程后,他们说我们应该有一个私有方法来请求一个对象并指出其属性。例如:

  def category_params
    params.require(:category).permit(:name)
  end

当我创建一个新类别(此示例中的数据)时,将在我的create动作中使用:

@category = Category.new(category_params)

但是,当我更新类别时,我不能做,@category = Category.new(category_params)因为:category不会中返回params这种情况,我的comentaries看到了这个问题require(:category)需要拆下来更新操作的工作。这样可以解决问题,但是以其他方式,当我使用category_paramsso创建新类别时,总是会保存一个空对象。

有两个私有方法,on withrequire和另一个not不是一个好习惯,还是吗?在这种情况下的良好做法是什么?

编辑1(我的更新和编辑操作):

def edit
  @category = Category.find(params[:id])
end

def update
  @category = Category.find(params[:id])

  if @category.update_attributes(category_params)
    # TO DO
  else
    render 'edit'
  end
end
最大限度

我认为您只是对强参数应该做什么感到困惑-它基本上只是将用于质量分配的参数列入白名单

批量分配是指使用散列中的属性实例化新记录或从散列中更新属性时。update尽管您通常会使用#update而不是,您的操作非常好#update_attibutes

做到这一点的明智方法是在控制器中使用私有方法,这样您就不必在更新和创建操作中进行两次完全相同的白名单。

class CategoriesController

  before_action :set_category, only: [:show, :edit, :update, :destroy]

  def new
    @category = Category.new
  end

  def create
    @category = Category.create(category_params)
    respond_with(@category)
  end

  def edit
  end

  def update
    if @category.update(category_params)
    # TO DO
    else
      render 'edit'
    end
  end

  # ...

  private

    def set_category
      @category = Category.find(params[:id])
    end

    def category_params
      params.require(:category).permit(:name, :foo, :bar)
    end

end

我们像这样设置表单:

app/views/categories/_form.html.erb

<%= form_for(@category) do |f| %>
  <div class="field">
    <%= f.label :name %>
    <%= f.text_field :name %>
  </div>

  <%= f.submit %>
<% end %>

我们可以使用完全相同的形式来创建新记录和编辑。

app / views / categories / new.html.erb:

<%= render partial: "form" %>

app / views / categories / update.html.erb:

<%= render partial: "form" %>

请注意,在某些情况下,您可能希望允许一项操作具有某些属性,但不允许另一项属性。在这种情况下,您只需创建两个强参数方法:

class CategoriesController

  before_action :set_category, only: [:show, :edit, :update, :destroy]

  def new
    @category = Category.new
  end

  def create
    @category = Category.create(create_params)
    respond_with(@category)
  end

  def edit
  end

  def update
    if @category.update(update_params)
    # TO DO
    else
      render 'edit'
    end
  end

  # ...

  private

    def set_category
      @category = Category.find(params[:id])
    end

    def create_params
      params.require(:category).permit(:name, :foo, :bar)
    end

    def update_params
      params.require(:category).permit(:name)
   end

end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从方法更改对象属性(最佳实践)

来自分类Dev

调用自对象方法时的最佳实践

来自分类Dev

在Play / Scala中对持久对象的缓存请求的最佳实践

来自分类Dev

引用对象的最佳实践

来自分类Dev

将对象属性链接到类或对象的最佳实践方法

来自分类Dev

Symfony GET/POST 方法中请求参数的最佳实践

来自分类Dev

对象方法调用VS类方法调用。最佳实践?

来自分类Dev

Rails“服务对象”最佳实践-类方法或实例化

来自分类Dev

使用C#序列化对象的最佳实践/方法

来自分类Dev

角度:对象结构最佳实践

来自分类Dev

PHP。创建对象的最佳实践

来自分类Dev

返回对象(PHP最佳实践)

来自分类Dev

Ruby包含对象的最佳实践

来自分类Dev

iOS创建对象最佳实践

来自分类Dev

使用Yesod验证JSON请求的最佳实践

来自分类Dev

Spring Boot请求映射最佳实践

来自分类Dev

使用Yesod验证JSON请求的最佳实践

来自分类Dev

顺序 url 请求 nodejs 的最佳实践

来自分类Dev

解析请求参数 Python (Flask) 的最佳实践

来自分类Dev

TryGet方法样式的最佳实践

来自分类Dev

最佳的OOP方法和实践

来自分类Dev

``对象历史''的Python继承最佳实践

来自分类Dev

在多个容器中存储对象的最佳实践

来自分类Dev

在课堂上创建对象的最佳实践

来自分类Dev

Java最佳实践-返回对象与泛型

来自分类Dev

NSArray查找对象-最佳实践

来自分类Dev

最佳实践:在Android活动之间传递对象

来自分类Dev

生成响应对象的最佳实践

来自分类Dev

连接字符串对象的最佳实践