我有一个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
正如你所看到的,我正在重复自我。我希望通过模型提供这些(并且只有这些)属性,但找不到合适的解决方案。是否有什么可以保护大众写作的属性?或者我可能是指大众阅读?
如下面的评论中所述,我希望拥有一个包含属性name
和i_am_private
的模型。当我将该模型渲染为json - render :json => @model
时 - 我只想显示name
。
Ruby 1.8.7 Rails 3
答案 0 :(得分:14)
如何在组模型中覆盖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
答案 1 :(得分:2)
要防止质量分配,请将以下内容添加到模型中:
attr_accessible :attr1, :attr2, :attr3
其中attr1,attr2,attr3等是您要允许进行质量分配的属性,该模型的其余属性将不允许进行质量分配。