隐藏Rails模型属性

我有一个API的控制器,如下所示:

def index respond_to do |format| format.json { render :json => @groups.to_json(:only => [:id, :name, :description, :created_at, :updated_at])} end end def show respond_to do |format| format.json { render :json => @group.to_json(:only => [:id, :name, :description, :created_at, :updated_at]) } end end # @todo add store to item def create if @group.save render :json => @group.to_json(:only => [:id, :name, :description, :created_at, :updated_at]) else render :status => 406 end end def update if @group.update_attributes(params[:group]) render :json => @group.to_json(:only => [:id, :name, :description, :created_at, :updated_at]) else render :status => 406 end end def destroy @group.destroy render :text => "" end 

正如你所看到的,我正在重复我的自我。 我希望通过模型提供这些(并且只有这些)属性,但找不到合适的解决方案。 有什么东西可以保护大众写作的属性吗? 或者我可能意味着大众阅读?

如下面的评论中所述,我想要一个具有属性, namei_am_private的模型。 当我将该模型渲染为json时 – render :json => @model – 我只希望显示name

Ruby 1.8.7 Rails 3

如何在组模型中覆盖as_json方法?

 class Group < ActiveRecord:Base ... def as_json(options={}) { :id => id, :name => name, :description => description, :created_at => created_at, :updated_at => updated_at } end end 

要防止质量分配,请将以下内容添加到模型中:

  attr_accessible :attr1, :attr2, :attr3 

其中attr1,attr2,attr3等是您要允许进行质量分配的属性,该模型的其余属性不允许进行质量分配。