使用JSON API我想更新company.name
。 user
属于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; }
}
答案 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