使用JSON对象更新关联

时间:2015-12-02 23:04:25

标签: ruby-on-rails ruby json ruby-on-rails-4 activerecord

使用JSON API我想更新company.nameuser属于company user。我们可以做些什么来确保用户不应该更新他们不属于的公司?注意validates_associated可能没有公司

我调查class User < ActiveRecord::Base belongs_to :company end class Company < ActiveRecord::Base has_many :users end class CompanyController < ApplicationController def update if @current_user.company.update_attributes(params[:company]) render updated and return else render not_found and return end end def company_params params.require(:company).permit(:name) end end describe "#update" do it " company name" do @company.name = "new_name" put :update, :token_id => "fake_token_id", :id => @company.id, :company => {:name => @company.name} end end ,但我不确定如何实施。注意,我们从前端传递公司对象。

public class GridObject
{
    public int datarow { get; set; }
    public int datacol { get; set; }
    public int datasizex { get; set; }
    public int datasizey { get; set; }
}

public class GridObjectCollection
{
    public GridObject[] GridObjects { get; set; }
}

2 个答案:

答案 0 :(得分:3)

由于您在@ current_user.company上调用update_attributes,该公司将始终属于@current_user,并且它将是唯一一个更新的公司。

现在,如果您出于任何原因将公司更新参数提交到#update操作,并且用户没有公司,您可以添加:

def update
  if @current_user.company && @current_user.company.update_attributes(params[:company])
    render updated
  else
    render not_found
  end
end

答案 1 :(得分:1)

update操作中执行此操作:

def update
  company = Company.find(params[:id])
  if !@current_user.company.nil? and company == @current_user.company
    if @current_user.company.update_attributes(params[:company])
      render updated and return
    else
      render fail_to_update and return
    end
  else
    render not_found and return
  end
end