データベースに IP というフィールドがあり、Rails で構築されたブログでユーザーがメッセージを送信するときに (#create メソッドで) ユーザー IP を入力します。
しかし、記事を別の形式 (JSON) で表示したい場合は、フィールドが表示されます。フィールド IP を非表示にするにはどうすればよいですか?
データベースに IP というフィールドがあり、Rails で構築されたブログでユーザーがメッセージを送信するときに (#create メソッドで) ユーザー IP を入力します。
しかし、記事を別の形式 (JSON) で表示したい場合は、フィールドが表示されます。フィールド IP を非表示にするにはどうすればよいですか?
次のように、コントローラーのフォーマット ブロックで実行できます。
respond_to do |format|
format.json { render :json => @user, :except=> [:ip] } # or without format block: @user.to_json(:except => :ip)
end
一般的に特定のフィールドを除外する場合は、ユーザー モデルの to_json メソッドを上書きするだけです。
class User < ActiveRecord::Base
def to_json(options={})
options[:except] ||= [:ip]
super(options)
end
end
更新: Rails 6 では、メソッドは次のようになりましたas_json
。
class User < ApplicationRecord
def as_json(options={})
options[:except] ||= [:ip]
super(options)
end
end